Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.09.2007, 23:47   #1
Pashekka
Пользователь
 
Регистрация: 14.09.2007
Сообщений: 11
По умолчанию Проверка пустой католог или нет!

Код:
function TF_Main.IsEmtyDir(Path: TFileName): Boolean;
var
  SR:TSearchRec;
begin
  result:=true;
  if FindFirst(Path+'\*.*',faAnyFile,SR) = 0 then
    repeat
      if ((SR.Name<>'..') and (SR.Name<>'.')) then
        begin
          result := false;
          break;
        end;
    until FindNext(SR) <> 0;
  FindClose(SR);
end;
Подскажите где ошибка!
Pashekka вне форума Ответить с цитированием
Старый 26.09.2007, 00:00   #2
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,524
По умолчанию

Цитата:
if FindFirst(Path+'\*.*',faAnyFile,SR) = 0 then пустой
Разве этого не достаточно?

точка и две точки - это не файлы это каталоги.

Цитата:
FindFirst('*.*', faAnyFile, SearchRec) = 0 then
Я так юзаю. Т.е. в папку перехожу с помощью ChDir

FindFirst - это по теме, также смотри похожие команды.
Alar вне форума Ответить с цитированием
Старый 26.09.2007, 00:45   #3
Pashekka
Пользователь
 
Регистрация: 14.09.2007
Сообщений: 11
По умолчанию

Цитата:
Сообщение от Alar Посмотреть сообщение
Разве этого не достаточно?

точка и две точки - это не файлы это каталоги.



Я так юзаю. Т.е. в папку перехожу с помощью ChDir
А если мне нужны только папки? То получается правильно?
Pashekka вне форума Ответить с цитированием
Старый 26.09.2007, 01:40   #4
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

если нужны только папки то
if SR.Attr = faDirectory then...
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 26.09.2007, 01:52   #5
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,524
По умолчанию

Цитата:
Сообщение от Pashekka Посмотреть сообщение
А если мне нужны только папки? То получается правильно?


Для тех, кто поленился идти по ссылке скопирую код + там есть описание и пояснения.
Код:

Пример кода : Ищем все подходящие под Unit1.d* файлы в текущем каталоге 
var
  searchResult : TSearchRec;

begin
  // Пытаемся найти правильные файлы, соответствующие Unit1.d* в текущем каталоге
  if FindFirst('Unit1.d*', faAnyFile, searchResult) = 0 then
  begin
    repeat
      ShowMessage(Имя файла = '+searchResult.Name);
      ShowMessage('Размер файла = '+IntToStr(searchResult.Size));
    until FindNext(searchResult) <> 0;

    // Должен освободить ресурсы, используемые этими успешными, поисками
    FindClose(searchResult);
  end;
end;

Результат выполнения:
Имя файла = Unit1.dcu
Размер файла = 4382
Имя файла = Uni1.dfm
Размер файла = 524
Имя файла = Uni1.ddp
Размер файла = 51
Код:
Пример кода : Ищем все каталоги выше, включая текущий 
var
  searchResult : TSearchRec;

begin
  // Пробуем найти каталоги выше текущего каталога
  SetCurrentDir('..');

  if FindFirst('*', faDirectory, searchResult) = 0 then
  begin
    repeat
      // Показываем только каталоги
      if (searchResult.attr and faDirectory) = faDirectory
      then ShowMessage('Directory = '+searchResult.Name);
    until FindNext(searchResult) <> 0;

    // Должен освободить ресурсы, используемые этими успешными, поисками
    FindClose(searchResult);
  end;
end;


Результат выполнения:
Directory = .
Directory = ..
Directory = Bin
Directory = Help
Directory = Projects
Directory = Demos
Directory = Lib
Directory = Objrepos
Directory = MergeModules
Directory = Imports
Directory = Source
Directory = Rave5
Directory = Ocx
Alar вне форума Ответить с цитированием
Старый 26.09.2007, 02:00   #6
Pashekka
Пользователь
 
Регистрация: 14.09.2007
Сообщений: 11
По умолчанию

Цитата:
Для тех, кто поленился идти по ссылке скопирую код + там есть описание и пояснения.
Не у меня такое скаченое есть! Я смотрел это все просто на одном из форумов меня уверяют что можно сократить код! А я чего-то не пойму как, а призноваться не в какую.
Pashekka вне форума Ответить с цитированием
Старый 26.09.2007, 02:06   #7
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,524
По умолчанию

Pashekka, так я в первом посте написал в 1 строчку, разве не работает?
Alar вне форума Ответить с цитированием
Старый 26.09.2007, 23:18   #8
Pashekka
Пользователь
 
Регистрация: 14.09.2007
Сообщений: 11
По умолчанию

Цитата:
Сообщение от Alar Посмотреть сообщение
Pashekka, так я в первом посте написал в 1 строчку, разве не работает?
Работает, но ведь это только для файлов!?
Для папок не катит т.к. там есть "." и "..", без цикла не обойтись! Блин если не так переубедите меня!
Pashekka вне форума Ответить с цитированием
Старый 27.09.2007, 01:16   #9
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Просмотрел внимательно функцию из первого поста. Там все правильно, если она найдет в директории хоть что-то отличное от '.' и '..' она вернет false т.е. директория не пуста. Может ты путь неправильный в нее передаешь?
Есть там небольшая ошибка - FindClose нужно вызывать в случае успешного поиска, а там она в любом случае вызывается. Но на результат функции это не влияет.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 27.09.2007, 01:21   #10
Pashekka
Пользователь
 
Регистрация: 14.09.2007
Сообщений: 11
По умолчанию

Спасибо большое ! mutabor. Ни как не могу предопределить такие вот мелкие ошибки, блин.
Pashekka вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пустой список Executr Общие вопросы Delphi 5 02.06.2008 20:55
Удалить не пустой каталого Иллидан Общие вопросы Delphi 14 19.05.2008 08:55
запрет на ввод пустой записи ГОСЕАН БД в Delphi 10 08.03.2008 03:48