1. Уважаемые гости и пользователи форума.
    Администрация настоятельно рекомендует не регистрировать несколько аккаунтов для одного пользователя. При выявлении наличия мультиаккаунтов будут заблокированы все учетные записи данного пользователя.
    Аккаунты, зарегистрированные на временную почту будут также заблокированы.

IsDirEmpty

Тема в разделе "Inno Setup", создана пользователем Christi, 17 фев 2019.

  1. Новичок

    Регистрация:
    17 фев 2019
    Сообщения:
    3
    Симпатии:
    0
    Почему эта функция возвращает True, даже если в проверяемой папке имеются папки/файлы?

    Код (Inno):
    function IsDirEmpty(const Dir: string): Boolean;
    var
      FindRec: TFindRec;
    begin
      Result := FindFirst(Dir + '\*', FindRec);
      FindClose(FindRec);
    end;
     
  2. Ветеран

    Регистрация:
    31 мар 2015
    Сообщения:
    331
    Симпатии:
    168
    Пол:
    Мужской
    А если так:
    Код (Inno):
    function IsDirEmpty(const Dir: string): Boolean;
    var
      FindRec: TFindRec;
    begin
     if FindFirst(Dir + '\*', FindRec) then
        Result := true else
        Result := false;
    FindClose(FindRec);
    end;
     
  3. Новичок

    Регистрация:
    17 фев 2019
    Сообщения:
    3
    Симпатии:
    0
    SBalykov, всё так же.
     
  4. Ветеран

    Регистрация:
    31 мар 2015
    Сообщения:
    331
    Симпатии:
    168
    Пол:
    Мужской
    А код в котором применяется функция IsDirEmpty?
     
  5. Ветеран

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

    Регистрация:
    17 фев 2019
    Сообщения:
    3
    Симпатии:
    0
    L-e-o-N, в итоге я сделал так. Функция работает.
    Код (Inno):
    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;
     
  7. Ветеран

    Регистрация:
    1 дек 2015
    Сообщения:
    177
    Симпатии:
    56
    Пол:
    Мужской
    Ну или так))
     

Поделиться этой страницей