Вопрос IsDirEmpty

Christi

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

Код:
function IsDirEmpty(const Dir: string): Boolean;
var
  FindRec: TFindRec;
begin
  Result := FindFirst(Dir + '\*', FindRec);
  FindClose(FindRec);
end;
 

SBalykov

Старожил
Почему эта функция возвращает 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;
 

L-e-o-N

Старожил
Функция FindFirst с фильтром * также находит каталог "." (который указывает на текущий каталог) а также ".." (который указывает на каталог на уровень выше) Вам с помощью FindNext и цикла нужно посчитать количество найденых элементов и вернуть false только если их больше 2 (если это условие верно тогда в целях оптимизации дальше щитать не нужно).
 

Christi

Мимокрокодил
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

Старожил
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;
Ну или так))
 
Сверху