Вниз
Скачать: CL | DM;

Проверка директория   Найти похожие ветки 

← →
Patrick   (2008-05-14 16:35) [0]

Подскажите, каким наиболее простым способом проверить программно пустой директорий или нет?


← →
Palladin ©   (2008-05-14 16:37) [1]

Функция ДиректорияСуществует(Директория:Строка):ЛогическийТип;


← →
Mozgan   (2008-05-14 16:42) [2]

Проверка самого катлога так
if not DirectoryExists("путь к папке") then
showmessage ("папки нет") else showmessage("папка на емсте")


Если проверять наличие файлов в папке то используй


var
 F: TSearchRec;
 Path: string;
 Attr: Integer;
begin
 {Искать все файлы в заданной директории с расширение .wav}
 Path := "e:\audio\album31\*.wav";
 {которые имеют атрибуты "Только для чтения" и "Архивный"}
 Attr := faReadOnly + faArchive;

 FindFirst(Path, Attr, F);

 {Если хотя бы один файл найден, то продолжить поиск}
 if F.name <> "" then
 begin


Это самый простой алгоритм поиска файлов в папке


← →
Renegat   (2008-05-14 16:43) [3]

Дык дело не в её наличии/отсутствии, а в том, есть ли в ненй файлы или нет.
Это реализуется так:

1) приписываешь к имени папки \*.*
2) полученную строчку скармливаешь FindFirstFile
3) если возвращённый результат равен 0FFFFFFFFh, папка пуста. Выходим
4) если нет, в ней есть хотя бы один файл/папка. Вызываем FindClose(возвращённый_результат). Выходим


← →
Patrick   (2008-05-14 16:47) [4]

Так насколько я понимаю существование директория, а вот пустой он или нет?


← →
Palladin ©   (2008-05-14 16:52) [5]

хм... а ведь точно... не вник в вопрос...


← →
Patrick   (2008-05-14 16:55) [6]

Так значит примерно так

procedure TForm1.Button1Click(Sender: TObject);
var
   FileInfo : TWin32FindDataA;
   FindResult : dword;
   s : string;
begin
 s := "C:\!!!\*.*";
 FindResult := FindFirstFile( Pointer(S), FileInfo);
 if FindResult <> $0FFFFFFFFh
    then ShowMessage("&#202;&#224;&#242;&#224;&#235;&#238;&#227; &#237;&#229; &#239;&#243;&#241;&#242;&#238;&#233;.")
    else ShowMessage("&#202;&#224;&#242;&#224;&#235;&#238;&#227; &#239;&#243;&#241;&#242;&#238;&#233;.");
end;


← →
Palladin ©   (2008-05-14 16:56) [7]


> Pointer(S)

PChar


← →
Renegat   (2008-05-14 16:58) [8]

procedure TForm1.Button1Click(Sender: TObject);
var
 FileInfo: TWin32FindDataA;
 FindResult: dword;
 s: string;
begin
 s := "C:\!!!\*.*";
 FindResult := FindFirstFile( Pointer(S), FileInfo);
 if FindResult<>$FFFFFFFF then begin
   ShowMessage("Yes.")
   FindClose(FindResult);
 end else ShowMessage("No.");
end;


← →
Renegat   (2008-05-14 17:00) [9]

Ибо надо закрывать хендл после завершения поиска. И ещё, конечно, [7].


← →
Игорь Шевченко ©   (2008-05-14 17:09) [10]

Renegat   (14.05.08 16:58) [8]

Сам проверял ?


← →
Patrick   (2008-05-14 17:15) [11]

Директорий пустой , а выдается Yes и еще на FileClose ругается что тип параметров не совпадает


← →
Игорь Шевченко ©   (2008-05-14 17:36) [12]

function DirectoryIsEmpty (const DirName: string): Boolean;
var
 F: TSearchRec;
 FindResult: Integer;
 S: string;
begin
 S := IncludeTrailingPathDelimiter(DirName)+"*.*";
 FindResult := FindFirst(S, faAnyFile, F);
 while (FindResult = 0) and ((F.Name = ".") or (F.Name = ".."))
    and ((F.Attr and faDirectory) <> 0) do
   FindResult := FindNext(F);
 Result := FindResult <> 0;
 FindClose(F);
end;


?


← →
Германн ©   (2008-05-14 17:47) [13]


> Игорь Шевченко ©   (14.05.08 17:36) [12]

Пустая директория это директория не содержащая файлов? А если в ней есть поддиректории она пустая?


← →
Игорь Шевченко ©   (2008-05-14 17:51) [14]

Германн ©   (14.05.08 17:47) [13]

В моем случае пустая это та, которая не содержит ничего.


← →
Leonid Troyanovsky ©   (2008-05-14 18:16) [15]


> Patrick   (14.05.08 16:35)

> Подскажите, каким наиболее простым способом проверить программно
> пустой директорий

Сейчас папка пуста, через несколько колов времени - нет.
Сл-но, польза подобной функции близка к нулю.

--
Regards, LVT.


← →
Anatoly Podgoretsky ©   (2008-05-14 21:05) [16]

В сообшение надо просто написать, что на момент времени Х папка пуста.


← →
Anatoly Podgoretsky ©   (2008-05-14 21:06) [17]


> Подскажите, каким наиболее простым способом проверить программно
> пустой директорий или нет?

Самое простое FindFirst с маской *.* и аттрибутом faAnyFile


← →
Умище   (2008-05-14 22:02) [18]

>Анатолий Подгорецкий
+ обязательная проверка совпадения имени с "." или ".."


← →
Anatoly Podgoretsky ©   (2008-05-14 22:20) [19]

> Умище  (14.05.2008 22:02:18)  [18]

О да, упустил этот факт.


← →
palva ©   (2008-05-14 22:41) [20]


> Сейчас папка пуста, через несколько колов времени - нет.
> Сл-но, польза подобной функции близка к нулю.

Удалить директорию и всё. Если удалилась, значит была пустая. И никто туда уже ничего не положит.


← →
Leonid Troyanovsky ©   (2008-05-14 23:39) [21]


> palva ©   (14.05.08 22:41) [20]

> Удалить директорию и всё. Если удалилась, значит была пустая.

Если удаление и было целью проверки, то,
безусловно, поступать надо именно так.

--
Regards, LVT.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.5 MB
Время: 0.015 c
3-1199896167
AlexeyMir
2008-01-09 19:29
2008.06.08
Cвойства полей базы Firebird.


4-1190441616
antoxa2005
2007-09-22 10:13
2008.06.08
Открыть порт в Брэндмауэре WinXP SP2


15-1209437851
Slider007
2008-04-29 06:57
2008.06.08
С днем рождения ! 29 апреля 2008 вторник


4-1190801074
AndreiDeJavu
2007-09-26 14:04
2008.06.08
Как инициализировать звуковую карту до загрузки Windows


11-1190041757
Alexeis_
2007-09-17 19:09
2008.06.08
Более подробная информация о создании зеркал




   Наверх