Текущий архив: 2006.12.17;
Скачать: CL | DM;
ВнизУдаление всех файлов в папке Найти похожие ветки
← →
Sergg (2006-11-29 11:45) [0]Подскажите пожалуйста как грамотно грохнуть все файлы в папке?
пробовал FindFirst - FindNext но что-то не очень:(
← →
clickmaker © (2006-11-29 11:45) [1]
> пробовал FindFirst - FindNext
а как пробовал? И что значит "грамотно"?
← →
Сергей М. © (2006-11-29 11:49) [2]
> Sergg
см. SHFileOperation
← →
Sergg (2006-11-29 11:57) [3]>clickmaker
Пробовал где-то так:
if FindFirst("D:\Ðåçåðâ_æóðíà ;ëîâ\logs", faAnyFile, NextFile) = 0 then
repeat
DeleteFile(NextFile.Name);
until FindNext(NextFile) <> 0;
FindClose(NextFile);
Грамотно - это так, чтоб не наступать на чужие грабли;)
>Сергей М.
В справке SHFileOperation нету:(
← →
Сергей М. © (2006-11-29 11:58) [4]
> В справке SHFileOperation нету
Есть.
см. Help -> Windows SDK
← →
clickmaker © (2006-11-29 12:00) [5]"D:\Ðåçåðâ_æóðíà ;ëîâ\logs\*.*"
плюс добавь еще проверку на Name <> "." and Name <> "..", иначе влетишь в рекурсию )
← →
Anatoly Podgoretsky © (2006-11-29 12:01) [6]> Sergg (29.11.2006 11:45:00) [0]
Наверно неграмотно грохаешь. Поскольку практически любой путь ведет к заданой цели.
← →
Amoeba © (2006-11-29 12:08) [7]На http://www.delphikingdom.com ("Королевство Delphi") есть целая статья об SHFileOperation.
← →
Sergg (2006-11-29 12:09) [8]>Anatoly Podgoretsky
Ясное дело, иначе бы я и не приставал к вам с глупыми вопросами;)
код
if FindFirst("D:\Ðåçåðâ_æóðíà ; ;ëîâ\logs", faAnyFile, NextFile) = 0 then
repeat
ShowMessage(NextFile.Name);
until FindNext(NextFile) <> 0;
FindClose(NextFile);
выдает только "logs" - Это ссылка на папку в которой я и хочу все удалить, и там есть еще файлы, чего оно не работает?
← →
Anatoly Podgoretsky © (2006-11-29 12:31) [9]> Sergg (29.11.2006 12:09:08) [8]
Откуда жанаая функция найдет блее одного файла, нет же подстановочных симвовов.
И это, научись пользоваться Copy/Paste
← →
Юрий Зотов © (2006-11-29 12:33) [10]> Sergg (29.11.06 12:09) [8]
Не задана маска для поиска.
Если нужен пример, то он есть в справке.
← →
Anatoly Podgoretsky © (2006-11-29 12:52) [11]> Юрий Зотов (29.11.2006 12:33:10) [10]
> Если нужен пример, то он есть в справке.
И у меня в FAQ на сайте, включая твой пример, как самый образцовый.
← →
Sergg (2006-11-29 13:32) [12]>Сергей М.
Спасибо, SHFileOperation-хорошая штука!!!:)
← →
Anatoly Podgoretsky © (2006-11-29 14:12) [13]> Sergg (29.11.2006 13:32:12) [12]
Еще бы, а то завтра потребуется скопировать, а тут всего лишь операцию поменять
← →
Sergg (2006-11-29 14:56) [14]>Anatoly Podgoretsky
Вредный дядька, вы хоть с клавиатурой для начала работать научитесь:
> Откуда жанаая функция найдет блее одного файла, нет же подстановочных
> симвовов.
> И это, научись пользоваться Copy/Paste
← →
Anatoly Podgoretsky © (2006-11-29 15:12) [15]> Sergg (29.11.2006 14:56:14) [14]
Зато у меня Copy/Paste правильно работают.
А насчет клавиатуры хочешь померяться на скорость, в совокупности с правильностью?
← →
Sergg (2006-11-29 15:17) [16]Ладно, ладно, это я так;)))
← →
clickmaker © (2006-11-29 15:21) [17]
> [16] Sergg (29.11.06 15:17)
> Ладно, ладно, это я так;)))
c Анатолием бесполезно соревноваться. У него конфискованный спам-робот заготовлен на этот случай
← →
Дмитрий Белькевич © (2006-11-29 16:21) [18]Вот что пользую, никогда не отказывало, хотя я особенно много им и не стирал, насколько помню, большей частью из Rx"ов:
function ClearDir(const Path: string; Delete: Boolean): Boolean;
const
FileNotFound = 18;
var
FileInfo: TSearchRec;
DosCode: Integer;
begin
Result := DirectoryExists(Path);
if not Result then
begin
Exit;
end;
DosCode := FindFirst(NormalDir(Path) + "*.*", faAnyFile, FileInfo);
try
while DosCode = 0 do
begin
if (FileInfo.Name[1] <> ".") and (FileInfo.Attr <> faVolumeID) then
begin
if (FileInfo.Attr and faDirectory = faDirectory) then
begin
Result := ClearDir(NormalDir(Path) + FileInfo.Name, Delete) and Result;
end
else
begin
if (FileInfo.Attr and faVolumeID <> faVolumeID) then
begin
if (FileInfo.Attr and faReadOnly = faReadOnly) then
begin
FileSetAttr(NormalDir(Path) + FileInfo.Name, faArchive);
end;
Result := DeleteFile(NormalDir(Path) + FileInfo.Name) and Result;
end;
end;
end;
DosCode := FindNext(FileInfo);
end;
finally
FindClose(FileInfo);
end;
if Delete and Result and (DosCode = FileNotFound) and not ((Length(Path) = 2) and (Path[2] = ":")) then
begin
try
RmDir(Path);
except
end;
Result := (IOResult = 0) and Result;
end;
end;
← →
Anatoly Podgoretsky © (2006-11-29 16:32) [19]> clickmaker (29.11.2006 15:21:17) [17]
Не конфискованный, а патентованый
← →
clickmaker © (2006-11-29 16:44) [20]
> if (FileInfo.Name[1] <> ".")
а если у меня какой-нить .htaccess?
← →
Anatoly Podgoretsky © (2006-11-29 16:46) [21]Естественно это ошибка, сравнение должно быть точное, а не по первому символу.
← →
alex_*** © (2006-11-29 16:49) [22]пишем батник: del *.* и напускаем на него ShellExecute. все вопросы к удалению к командному интерпретатору
← →
alex_*** © (2006-11-29 16:49) [23]+ получаем охренительно настраиваемое удаление
← →
Игорь Шевченко © (2006-11-29 17:50) [24]Можно я тоже свои 5 копеек ? Любителям "чиста на API"
procedure Utils_DeleteDirectoryTree (Directory: PChar);
var
FindHandle: THandle;
FindData: WIN32_FIND_DATAA;
begin
if not Assigned(Directory) or (Directory[0] = #0) or
not SetCurrentDirectoryA (Directory) then
Exit;
FindHandle := FindFirstFileA ("*", FindData);
if FindHandle <> INVALID_HANDLE_VALUE then
repeat
if (FindData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY)
= 0 then begin
SetFileAttributesA (FindData.cFileName, FILE_ATTRIBUTE_NORMAL);
DeleteFileA (FindData.cFileName);
end else if (lstrcmpA (FindData.cFileName, ".") <> 0) and
(lstrcmpA (FindData.cFileName, "..") <> 0) then
Utils_DeleteDirectoryTree (FindData.cFileName);
until not FindNextFileA (FindHandle, FindData);
Windows.FindClose (FindHandle);
SetCurrentDirectoryA ("..");
SetFileAttributesA (Directory, FILE_ATTRIBUTE_NORMAL);
RemoveDirectoryA (Directory);
end;
Страницы: 1 вся ветка
Текущий архив: 2006.12.17;
Скачать: CL | DM;
Память: 0.5 MB
Время: 0.044 c