![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проверка директория [D7, XP]
Patrick © (2008-05-14 16:35:00)Подскажите, каким наиболее простым способом проверить программно пустой директорий или нет?
Leonid Troyanovsky (2008-05-14 23:39:00) [1]
> palva © (14.05.08 22:41) [20]
> Удалить директорию и всё. Если удалилась, значит была пустая.
Если удаление и было целью проверки, то,
безусловно, поступать надо именно так.
--
Regards, LVT.
palva (2008-05-14 22:41:00) [2]
> Сейчас папка пуста, через несколько колов времени - нет.
> Сл-но, польза подобной функции близка к нулю.
Удалить директорию и всё. Если удалилась, значит была пустая. И никто туда уже ничего не положит.
Anatoly Podgoretsky (2008-05-14 22:20:00) [3]> Умище (14.05.2008 22:02:18) [18]
О да, упустил этот факт.
Умище (2008-05-14 22:02:00) [4]>Анатолий Подгорецкий
+ обязательная проверка совпадения имени с '.' или '..'
Anatoly Podgoretsky (2008-05-14 21:06:00) [5]
> Подскажите, каким наиболее простым способом проверить программно
> пустой директорий или нет?
Самое простое FindFirst с маской *.* и аттрибутом faAnyFile
Anatoly Podgoretsky (2008-05-14 21:05:00) [6]В сообшение надо просто написать, что на момент времени Х папка пуста.
Leonid Troyanovsky (2008-05-14 18:16:00) [7]
> Patrick (14.05.08 16:35)
> Подскажите, каким наиболее простым способом проверить программно
> пустой директорий
Сейчас папка пуста, через несколько колов времени - нет.
Сл-но, польза подобной функции близка к нулю.
--
Regards, LVT.
Игорь Шевченко (2008-05-14 17:51:00) [8]Германн © (14.05.08 17:47) [13]
В моем случае пустая это та, которая не содержит ничего.
Германн (2008-05-14 17:47:00) [9]
> Игорь Шевченко © (14.05.08 17:36) [12]
Пустая директория это директория не содержащая файлов? А если в ней есть поддиректории она пустая?
Игорь Шевченко (2008-05-14 17:36:00) [10]
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;
?
Patrick (2008-05-14 17:15:00) [11]Директорий пустой , а выдается Yes и еще на FileClose ругается что тип параметров не совпадает
Игорь Шевченко (2008-05-14 17:09:00) [12]Renegat (14.05.08 16:58) [8]
Сам проверял ?
Renegat (2008-05-14 17:00:00) [13]Ибо надо закрывать хендл после завершения поиска. И ещё, конечно, [7].
Renegat (2008-05-14 16:58:00) [14]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;
Palladin (2008-05-14 16:56:00) [15]
> Pointer(S)
PChar
Patrick (2008-05-14 16:55:00) [16]Так значит примерно так
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('Êàòàëîã íå ïóñòîé.')
else ShowMessage('Êàòàëîã ïóñòîé.');
end;
Palladin (2008-05-14 16:52:00) [17]хм... а ведь точно... не вник в вопрос...
Patrick (2008-05-14 16:47:00) [18]Так насколько я понимаю существование директория, а вот пустой он или нет?
Renegat (2008-05-14 16:43:00) [19]Дык дело не в её наличии/отсутствии, а в том, есть ли в ненй файлы или нет.
Это реализуется так:
1) приписываешь к имени папки \*.*
2) полученную строчку скармливаешь FindFirstFile
3) если возвращённый результат равен 0FFFFFFFFh, папка пуста. Выходим
4) если нет, в ней есть хотя бы один файл/папка. Вызываем FindClose(возвращённый_результат). Выходим
Mozgan (2008-05-14 16:42:00) [20]Проверка самого катлога так
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
Это самый простой алгоритм поиска файлов в папке