Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 34, средняя оценка - 4.85
stashappy
42 / 42 / 4
Регистрация: 21.08.2011
Сообщений: 625
#1

Переменные среды Windows - C++

24.08.2011, 19:21. Просмотров 4768. Ответов 10
Метки нет (Все метки)

Как в c++ использовать переменные среды windows?

Например я хочу открыть текстовый файл в каталоге C:\documents and settings\user\1.txt

Переменная среда данного каталога выглядит вот так: %USERPROFILE%
Пример:

C++
1
fp1 = fopen("C:\\documents and settings\\user\\1.txt","rb");
Как вместо полного пути к файлу использовать переменную среду windows?
Если зайти скажем в "Мой компьютер" и в адресную строку ввести: %USERPROFILE%\1.txt, то непременно откроется данный текстовый документ, если он конечно там имеется. Как можно сделать также, но только в приложении? Открывать текстовый файл, через переменную среду windows?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.08.2011, 19:21
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Переменные среды Windows (C++):

Бесплатные среды (IDE) для программирования на С/С++ для Windows 7 - C++
Я сейчас учусь программировать на C++. Мне нужен был хороший компилятор и ГЛАВНОЕ - ДЛЯ WINDOWS 7 И на русском языке (Желательно) Я...

Создать программу обработки массивов структур используя структурные переменные и переменные типа объеденения - C++
Создать массив структур, каждая из которых состоит из следующих елементов: факультет, курс, группа, фамилия студента и екзаменационная...

Переменные,значение функции,вспомогательные переменные. - C++
1)Даны переменные A,B,C.Изменить их значения,переместив их содержимое из A-в B,B-в C,C-в A,и вывести новые значения переменных A,B,C. ...

Создать бинарное дерево, по правой ветке - переменные типа инт, по левой - 2 переменные типа чар - C++
Здравствуйте. Необходимо создать бинарное дерево, по правой ветке - переменные типа инт, по левой - 2 переменные типа чар. ругается в...

разбор среды - C++
помогите разобраться со средой с++установил а как пользоваться незнаю что куда писать надо я только недавно начал осваивать компьютер очеь...

Настройка среды - C++
Как сделать, чтобы Microsoft Visual Studio 2010 (Professional) выделял ошибки красной волнистой линией и давал описание, наводя курсор?

10
Евгений М.
1036 / 977 / 54
Регистрация: 28.02.2010
Сообщений: 2,829
Завершенные тесты: 2
24.08.2011, 19:32 #2
http://msdn.microsoft.com/en-us/library/ms683188(VS.85).aspx
1
stashappy
42 / 42 / 4
Регистрация: 21.08.2011
Сообщений: 625
24.08.2011, 21:07  [ТС] #3
C++
1
2
char buffer[1024];
GetEnvironmentVariable("USERPROFILE",(char*)&buffer,sizeof(buffer));
Код работает. А как использовать его дальше? для строки:
fp1 = fopen("","rb");
0
villu
203 / 204 / 4
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
24.08.2011, 21:24 #4
http://msdn.microsoft.com/en-us/library/ms724265(v=vs.85).aspx
в строке можно написать что-то типа "%USERPROFILE%\\MyCoolSoft\\data\\"
2
stashappy
42 / 42 / 4
Регистрация: 21.08.2011
Сообщений: 625
24.08.2011, 21:45  [ТС] #5
Спасибо. Но код работает хорошо:
C++
1
2
char buffer[1024];
GetEnvironmentVariable("USERPROFILE",(char*)&buffer,sizeof(buffer));
Просто я не имею представления как вставить данные из буфера:

C++
1
fp1 = fopen("ВОТ СЮДА","rb");
Не забывая при этом указать имя файла, то есть 1.txt

Добавлено через 15 минут
А при использовании этого кода, выходит ошибка:
C++
1
2
           char buffer[1000];
    DWORD WINAPI ExpandEnvironmentStrings("USERPROFILE",(char*)&buffer,sizeof(buffer));
[BCC32 Error] Unit1.cpp(33): E2034 Cannot convert 'const char *' to 'unsigned long'
[BCC32 Error] Unit1.cpp(33): E2293 ) expected
[BCC32 Warning] Unit1.cpp(81): W8004 'ExpandEnvironmentStringsA' is assigned a value that is never used
0
villu
203 / 204 / 4
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
24.08.2011, 21:46 #6
Цитата Сообщение от stashappy Посмотреть сообщение
Не забывая при этом указать имя файла, то есть 1.txt
добавить прямо в строку %USERPROFILE%\\1.txt потом буфер получившийся использовать.
2
stashappy
42 / 42 / 4
Регистрация: 21.08.2011
Сообщений: 625
24.08.2011, 22:01  [ТС] #7
Спасибо вам огромное. Все заработало.

Правильный вариант:

C++
1
2
3
4
5
char buffer[1000];
ExpandEnvironmentStrings("%USERPROFILE%\\1.txt",(char*)&buffer,sizeof(buffer));
 
 
fp1 = fopen(buffer,"rb");
0
rangerx
1935 / 1544 / 141
Регистрация: 31.05.2009
Сообщений: 2,913
24.08.2011, 22:33 #8
http://www.cplusplus.com/reference/clibrary/cstdlib/getenv/
1
stashappy
42 / 42 / 4
Регистрация: 21.08.2011
Сообщений: 625
25.08.2011, 11:03  [ТС] #9
Возникла новая проблема..

C++
1
2
3
char buffer[32000];
ExpandEnvironmentStrings("%USERPROFILE%\\1.txt",(char*)&buffer,sizeof(buffer));
fp1 = fopen(buffer,"rb");
Данный код работает отлично. Открывает текстовый файл без проблем. Но натолкнулся на такую проблему. Если этой директории, этого файла вообще нет, то выходит ошибка при компиляции. То есть он не может открыть файл ибо он не существует.

Я пробовал писать вот так, но это ничего не помогло:
C++
1
2
3
4
5
char buffer[32000];
ExpandEnvironmentStrings("%USERPROFILE%\\1.txt",(char*)&buffer,sizeof(buffer));
if(buffer != NULL) {
fp1 = fopen(buffer,"rb");
}

Как решить проблему, если этого файла в директории нет?..
0
villu
203 / 204 / 4
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
25.08.2011, 11:06 #10
> ошибка при компиляции
а?
C
1
2
3
4
5
if(NULL != (fp1 = fopen(buffer,"rb"))) {
   // есть файл
} else {
    // нету файла
}
Добавлено через 51 секунду
C
1
if(buffer != NULL)
не верно. buffer у тебя всегда есть
1
stashappy
42 / 42 / 4
Регистрация: 21.08.2011
Сообщений: 625
25.08.2011, 11:21  [ТС] #11
Спасибо вам огромное. Код заработал.:-)
0
25.08.2011, 11:21
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.08.2011, 11:21
Привет! Вот еще темы с ответами:

Портабельные среды разработки - C++
Я нашел Dev-C++ на пока что. Кто может подсказать другие портабельные среды для C++?

Выбор среды разработки - C++
В общем-то в учебке стоит борланд с++ 2006 вроде, но что-то старенькое точно. Препод же посоветовал дома использовать embarcadero, грит...

переменная среды path. - C++
Привет, у меня такая проблема-нечайно стер данные в переменной среде path, теперь когда установил dev-c++ у меня вначале пишет что он не...

Выбор среды программирования - C++
Доброго времени суток. Желаю учится С++,но нужно правильно выбрать среду.Есть два компа.Один на ХР х32 ,второй на Винде 7 х64.На экспишке...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru