Проверить существует ли директория (Unix/Win32)
От: Аноним  
Дата: 03.03.08 19:31
Оценка:
Порекомендуйте пожалуйста переносимый метод проверки существования директории Win32/Unix, если не существует — то переносимый хотя бы между *nix, если и такого нет, то как быть?
Re: Проверить существует ли директория (Unix/Win32)
От: NoFate Россия  
Дата: 03.03.08 19:44
Оценка:
Способ есть.

Например, boost::filesystem

Это документация: http://boost.org/libs/filesystem/doc/index.htm
Re: Проверить существует ли директория (Unix/Win32)
От: Андрей Коростелев Голландия http://www.korostelev.net/
Дата: 03.03.08 19:49
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Порекомендуйте пожалуйста переносимый метод проверки существования директории Win32/Unix, если не существует — то переносимый хотя бы между *nix, если и такого нет, то как быть?


namespace fs = boost::filesystem;
fs::path dir("/etc", fs::native);
if (fs::exists(dir) && fs::is_directory(dir))
{
    ...
}
-- Андрей
Re: Проверить существует ли директория (Unix/Win32)
От: Uzumaki Naruto Ниоткуда  
Дата: 03.03.08 21:58
Оценка:
Если побыстрому набросать.. то что-то в этом роде.

inline int IsFolderExist(const char * szFolderPath)
{
#if defined(_MSC_VER)
    char szSearchMask [_MAX_PATH];
    sprintf(szSearchMask, "%s*", szFolderPath);

    struct _finddata_t c_file;
    intptr_t hFile;
    if( (hFile = _findfirst( szSearchMask, &c_file )) == -1L )
        return -1;

    _findclose( hFile );
    return 0;
#endif // defined(_MSC_VER)

#if defined(__GNUC__)
    struct stat stdata;
    return stat(szFilePath, &stdata)
#endif // defined(__GNUC__)
}

Re: Проверить существует ли директория (Unix/Win32)
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 03.03.08 22:48
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Порекомендуйте пожалуйста переносимый метод проверки существования директории Win32/Unix, если не существует — то переносимый хотя бы между *nix, если и такого нет, то как быть?


Для всех юниксов — вызвать stat() на путь и проверить st_mode загруженной структуры макросом S_ISDIR(). Ошибка из stat() означает, что такого нет, или недоступен, или ещё что; возврат 0 из макроса — что такое есть, но оно не каталог.

А вообще, для переносимости таки что-то boost'ообразное лучше бы применить, как тут уже сказали.
The God is real, unless declared integer.
Re[2]: Проверить существует ли директория (Unix/Win32)
От: . Великобритания  
Дата: 04.03.08 11:42
Оценка:
Uzumaki Naruto wrote:

> if( (hFile = _findfirst( szSearchMask, &c_file )) == -1L )

А чем _stat не устраивает?
Posted via RSDN NNTP Server 2.1 beta
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re: Проверить существует ли директория (Unix/Win32)
От: vnp  
Дата: 04.03.08 18:06
Оценка: +1
Здравствуйте, Аноним, Вы писали:

А>Порекомендуйте пожалуйста переносимый метод проверки существования директории Win32/Unix, если не существует — то переносимый хотя бы между *nix, если и такого нет, то как быть?


Сразу же вопрос — а зачем?
Как правило, существование директории само по себе интереса не представляет. С ней надо будет что-то делать. Любые попытки определить существование директории неизбежно приведут к "гонкам".
Гораздо проще и надежнее первый шаг просто опустить.
Если директория просто нужна, вызываем mkdir. Если директория обязана существовать, вызываем chdir. И т.д. В любом случае смотрим на код ошибки, и реагируем должным образом.
Re[3]: Проверить существует ли директория (Unix/Win32)
От: Uzumaki Naruto Ниоткуда  
Дата: 04.03.08 22:54
Оценка:
Всем устраивает, просто побыстрому набросал, что первое пришло в голову =)

 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.