powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как проверить, что каталог пуст
6 сообщений из 6, страница 1 из 1
Как проверить, что каталог пуст
    #32317132
KurS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть задача - выполнить какие-то действия в том случае, если каталог пуст.
Факт пустоты каталога пробую определить через
if (FindFirst(...) != 0)
{

}
в качестве первого параметра FindFirst указываю путь и маску *.* в конце
В помощи сказано, что если файл не найден, то возвращается Windows error code.
Пробовал через try ... catch ... . Все-равно при пустом каталоге проскакивает.
Может есть какой-нибудь другой способ проверить факт пустоты каталога.
С уважением, Сергей К.
...
Рейтинг: 0 / 0
Как проверить, что каталог пуст
    #32317185
maratka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно использовать FindFirstFile из SDK:
if (FindFirstFile() != INVALID_HANDLE_VALUE)
{...
}
...
Рейтинг: 0 / 0
Как проверить, что каталог пуст
    #32317186
q
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
q
Гость
struct _finddata_t f;
....

h = _findfirst(path, &f))
// проверить, не пусто ли. вроде бы по крайней мере должны быть "." и ".."

.. если не пусто, то
while( !(f.attrib & _A_SUBDIR))
{
if( _findnext(h, &f) == -1 )
return false;
}

return true;

// по крайней мере у меня написано примерно так , хотя немного для другой цели
...
Рейтинг: 0 / 0
Как проверить, что каталог пуст
    #32317260
KurS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Небольшое уточнение
В качестве первого параметра функции FindFirst передаю переменную (AnsiString), которая формируется программно. В этой переменной каталоги разделены двойным '\', если я в первом параметре подставлю путь, в котором каталоги разделены одним '\', то все нормально, т.е.
if (FindFirst(MyStr, iAttributes, sr) == 0)
в переменной MyStr - "C:\\Temp\\*.*" (не получается),
а когда конкретно укажу
if (FindFirst("C:\Temp\*.*", iAttributes, sr) == 0).
При этом если в маске файла указать конкретный файл (например в MyStr собрать "C:\\Temp\\flag.txt" ), то и в первом случае работает.
Непонятно ...
...
Рейтинг: 0 / 0
Как проверить, что каталог пуст
    #32317306
123456789098
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
писал:Есть задача - выполнить какие-то действия в том случае, если каталог пуст.
Факт пустоты каталога пробую определить через
if (FindFirst(...) != 0)
{

}
в качестве первого параметра FindFirst указываю путь и маску *.* в конце
В помощи сказано, что если файл не найден, то возвращается Windows error code.
Пробовал через try ... catch ... . Все-равно при пустом каталоге проскакивает.
Может есть какой-нибудь другой способ проверить факт пустоты каталога.
С уважением, Сергей К.

try ... catch ... тут непричем. если функция не находит то что ты ей сказал, то она не возбуждает исключение просто возвращает не 0

Если бы ты привел более полный код тогда возможно можно было бы что то сказать.
И к тому же в каждом каталоге есть 2 каталога:
1) .
2) ..
Вот их у тебя и находит.
вот тебе пример на котором можешь убедиться:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
void Test()
{
 TSearchRec F;
 if(FindFirst( "C:\\qq\\*.*" ,faAnyFile,F)){
   ShowMessage( "File not found" );
 }else{
   ShowMessage( "FindFile:" +F.Name);
   if(!FindNext(F)){
        ShowMessage( "FindFile:" +F.Name);
   };
 };
}


еще есть вариант что в пути к каталогу разделителем между каталогами ты писал один \ вместо двух ...
...
Рейтинг: 0 / 0
Как проверить, что каталог пуст
    #32317358
KurS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем, особенно 123456789098.
Я не учел наличие подкаталогов '.' и '..' . Поэтому когда задавал маску файла *.*, то ничего не получалось. Сейчас разобрался.
С уважением, Сергей К.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как проверить, что каталог пуст
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]