Вопрос IsDirEmpty

  • Автор темы Автор темы Christi
  • Дата начала Дата начала

Christi

Мимокрокодил
Почему эта функция возвращает True, даже если в проверяемой папке имеются папки/файлы?

Код:
function IsDirEmpty(const Dir: string): Boolean;
var
  FindRec: TFindRec;
begin
  Result := FindFirst(Dir + '\*', FindRec);
  FindClose(FindRec);
end;
 
Почему эта функция возвращает True, даже если в проверяемой папке имеются папки/файлы?

Код:
function IsDirEmpty(const Dir: string): Boolean;
var
  FindRec: TFindRec;
begin
  Result := FindFirst(Dir + '\*', FindRec);
  FindClose(FindRec);
end;
А если так:
Код:
function IsDirEmpty(const Dir: string): Boolean;
var
  FindRec: TFindRec;
begin
 if FindFirst(Dir + '\*', FindRec) then
    Result := true else
    Result := false;
FindClose(FindRec);
end;
 
Функция FindFirst с фильтром * также находит каталог "." (который указывает на текущий каталог) а также ".." (который указывает на каталог на уровень выше) Вам с помощью FindNext и цикла нужно посчитать количество найденых элементов и вернуть false только если их больше 2 (если это условие верно тогда в целях оптимизации дальше щитать не нужно).
 
L-e-o-N, в итоге я сделал так. Функция работает.
Код:
function IsDirEmpty(const Dir: string): Boolean;
var
  FindRec: TFindRec;
begin
  Result := True;
  if FindFirst(Dir + '\*', FindRec) then
    try
      repeat
        if (FindRec.Name <> '.') and (FindRec.Name <> '..') then
        begin
          Result := False;
          Break;
        end;
      until not FindNext(FindRec);
    finally
      FindClose(FindRec);
    end;
end;
 
L-e-o-N, в итоге я сделал так. Функция работает.
Код:
function IsDirEmpty(const Dir: string): Boolean;
var
  FindRec: TFindRec;
begin
  Result := True;
  if FindFirst(Dir + '\*', FindRec) then
    try
      repeat
        if (FindRec.Name <> '.') and (FindRec.Name <> '..') then
        begin
          Result := False;
          Break;
        end;
      until not FindNext(FindRec);
    finally
      FindClose(FindRec);
    end;
end;
Ну или так))
 
Назад
Сверху