ошибка опендира?

Я получаю сообщение об ошибке с этой инструкцией:

  dp = opendir ("%APPDATA%/.");

  output: 
  Couldn't open directory: Mo such file or directory.

но я не получаю ошибку с этой иструкцией:

dp = opendir ("C:/Users/xrobot/AppData/.");

output:
.
..
Local
LocalLow
Roaming

Почему ?


person xRobot    schedule 20.04.2012    source источник


Ответы (2)


opendir не расширяет метапеременные, как %APPDATA%, это делает оболочка. Так что такие вещи работают из командной строки, а не из программы. В вашей программе вы должны использовать абсолютный или относительный путь.

Вероятно, вы можете получить требуемый путь с помощью getenv(),

const char *appData = getenv("APPDATA");
if (appData) {
    dp = opendir(appData);
} else {
    /* die or recover */
}
person Daniel Fischer    schedule 20.04.2012
comment
Я не эксперт по Windows, но вам, вероятно, придется использовать для этого getenv(). Попробуйте const char* appData = getenv("APPDATA"); dp = opendir(appData); - person Component 10; 20.04.2012
comment
Я не знаю о C++, в C вы можете использовать getenv для поиска значения APPDATA. Ну, по крайней мере, на *nixish системах, насчет Windows не уверен. - person Daniel Fischer; 20.04.2012

Потому что первый opendir БУКВАЛЬНО пытается открыть каталог %APPDATA%/..

person Ed Heal    schedule 20.04.2012