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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 34, средняя оценка - 4.85
stashappy
 Аватар для stashappy
42 / 42 / 4
Регистрация: 21.08.2011
Сообщений: 625
24.08.2011, 19:21     Переменные среды Windows #1
Как в 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?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Евгений М.
1033 / 974 / 53
Регистрация: 28.02.2010
Сообщений: 2,817
Завершенные тесты: 2
24.08.2011, 19:32     Переменные среды Windows #2
http://msdn.microsoft.com/en-us/libr...88(VS.85).aspx
stashappy
 Аватар для stashappy
42 / 42 / 4
Регистрация: 21.08.2011
Сообщений: 625
24.08.2011, 21:07  [ТС]     Переменные среды Windows #3
C++
1
2
char buffer[1024];
GetEnvironmentVariable("USERPROFILE",(char*)&buffer,sizeof(buffer));
Код работает. А как использовать его дальше? для строки:
fp1 = fopen("","rb");
villu
202 / 202 / 4
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
24.08.2011, 21:24     Переменные среды Windows #4
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
в строке можно написать что-то типа "%USERPROFILE%\\MyCoolSoft\\data\\"
stashappy
 Аватар для stashappy
42 / 42 / 4
Регистрация: 21.08.2011
Сообщений: 625
24.08.2011, 21:45  [ТС]     Переменные среды Windows #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
villu
202 / 202 / 4
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
24.08.2011, 21:46     Переменные среды Windows #6
Цитата Сообщение от stashappy Посмотреть сообщение
Не забывая при этом указать имя файла, то есть 1.txt
добавить прямо в строку %USERPROFILE%\\1.txt потом буфер получившийся использовать.
stashappy
 Аватар для stashappy
42 / 42 / 4
Регистрация: 21.08.2011
Сообщений: 625
24.08.2011, 22:01  [ТС]     Переменные среды Windows #7
Спасибо вам огромное. Все заработало.

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

C++
1
2
3
4
5
char buffer[1000];
ExpandEnvironmentStrings("%USERPROFILE%\\1.txt",(char*)&buffer,sizeof(buffer));
 
 
fp1 = fopen(buffer,"rb");
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
24.08.2011, 22:33     Переменные среды Windows #8
http://www.cplusplus.com/reference/c...stdlib/getenv/
stashappy
 Аватар для stashappy
42 / 42 / 4
Регистрация: 21.08.2011
Сообщений: 625
25.08.2011, 11:03  [ТС]     Переменные среды Windows #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");
}

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

C++ Настройка среды
C++ Создать программу обработки массивов структур используя структурные переменные и переменные типа объеденения
Настройки среды dev c++ C++

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

Или воспользуйтесь поиском по форуму:
stashappy
 Аватар для stashappy
42 / 42 / 4
Регистрация: 21.08.2011
Сообщений: 625
25.08.2011, 11:21  [ТС]     Переменные среды Windows #11
Спасибо вам огромное. Код заработал.:-)
Yandex
Объявления
25.08.2011, 11:21     Переменные среды Windows
Ответ Создать тему
Опции темы

Текущее время: 23:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru