![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как быстро удалить файл? [D7, WinXP]
rolex © (2006-02-16 17:13:00)Нужно очитстить каталог Temporaru Internet Files. Делаю это так:
1) если в корзину удалять:
function DeleteRecycled(dir:string):Boolean;
var
fos:TSHFileOpStruct;
begin
ZeroMemory(@fos,SizeOf(fos));
with fos do
begin
wFunc:=FO_DELETE;
fFlags:=FOF_SILENT or FOF_NOCONFIRMATION or FOF_ALLOWUNDO;
pFrom:=PChar(dir+#0);
end;
Result:=(0=ShFileOperation(fos));
end;
2) безвозвратно:
function TForm1.DeleteF(dir:string):Boolean;
var
fos:TSHFileOpStruct;
begin
ZeroMemory(@fos,SizeOf(fos));
with fos do
begin
wFunc:=FO_DELETE;
fFlags:=FOF_SILENT or FOF_NOCONFIRMATION;
pFrom:=PChar(dir+#0);
end;
Result:=(0=ShFileOperation(fos));
end;
Думаю вы все знаете что в этой папке несколько тысяч файлов. И удаление происходит ну ОООЧень долго и той и другой процедурой.
Как быть? Ведь если через винду удалять, то всё происходит гораздо быстрей!
Джо (2006-02-18 06:23:00) [21]> [13] Defunct © (18.02.06 06:21)
Ну, хоть с этим разобрались :)
Defunct (2006-02-18 06:21:00) [22]Джо © (18.02.06 06:12) [12]
> Коммандный процессор стандартный, да это и неважно, поскольку deltree это не внутренняя команда, реализована в DELTREE.EXE.
Все, понял почему она у меня работает.
На винте установлен еще WinME, и в пути попала строка к WinME(шному)\Command
вот deltree из арсенала WinME и запускается под XP. Странно только, что не говорит о несовместимости версий.
Джо (2006-02-18 06:12:00) [23]> [11] Defunct © (18.02.06 05:57)
> а какая версия ОС? может cmd неправильный?
Windows XP prof., второй cервис-пак, Version 5.1.2600.
Коммандный процессор стандартный, да это и неважно, поскольку deltree это не внутренняя команда, реализована в DELTREE.EXE.
Defunct (2006-02-18 05:57:00) [24]> Avarage Seek
*average...
> Угу, 'deltree' is not recognized as an internal or external command,
надо же..
а какая версия ОС? может cmd неправильный?
Defunct (2006-02-18 05:51:00) [25]> а всего лишь делает соответствующие записи в таблице размещения файлов
и в корректирует запись в каталоге - стирает первую букву имени файла, т.о. помечая его как удаленный.
> Влияет ли дефрагментированность файлов на скорость их удаления?
влияет. если представить, что FAT - это отражение диска, то при удалении фрагментированной цепочки придется непоследовательно обращаться к разным секторам диска. А при непоследовательном чтении/записи секторов вступает в силу такой параметр диска как Avarage Seek, который всегда выше чем Track-to-Track seek.
Джо (2006-02-18 05:44:00) [26]> [8] Defunct © (18.02.06 05:41)
Угу, 'deltree' is not recognized as an internal or external command,
operable program or batch file.
Defunct (2006-02-18 05:41:00) [27]MS Windows XP [Ver. 5.1.2600] (SP2)
да действительно
> help deltree - не работает
а
> deltree
продолжает работать. А у вас как? что вообще "is not recognized"?
Джо (2006-02-18 05:33:00) [28]Кстати, и вот такая мысль. Влияет ли дефрагментированность файлов на скорость их удаления? В любом случае, DeleteFile с самим файлом ничего не делает, а всего лишь делает соответствующие записи в таблице размещения файлов (как на NTFS — не представляю).
Джо (2006-02-18 05:27:00) [29]> [5] Defunct © (18.02.06 05:20)
> > кстати, в XP нету deltree,
> быть такого не может
>
> ps: у меня стоит XP (команду эту пользую) ;>
Прямо и не знаю, что сказать. Комманды у меня такой нету (SP2), вот выдержка из Help из раздела Unavailable MS-DOS Commands.
The following MS-DOS commands are not available at the command prompt.
Command - New procedure or reason for obsolescence
assign - Not currently supported.
backup - Not currently supported.
choice - Not currently supported.
ctty - Not currently supported.
dblspace - Not currently supported.
deltree -The rmdir /s command deletes directories containing files and subdirectories. For more information about the rmdir command, see Rmdir.
---
Само собой, что такую комманду знаю и во времена ДОС ее использовал. Сейчас не использую, и ее отсутствие обнаружил случайно. :)
Defunct (2006-02-18 05:20:00) [30]> кстати, в XP нету deltree,
быть такого не может
ps: у меня стоит XP (команду эту пользую) ;>
Джо (2006-02-18 05:13:00) [31]> [3] Defunct © (18.02.06 04:56)
Задумался. Может, так оно и есть, насчет системных комманд (кстати, в XP нету deltree,вместо нее rmdir /s). Удаляет, действительно, очень быстро.
Defunct (2006-02-18 04:56:00) [32]Джо © (18.02.06 04:21) [2]
Это понятно, когда файлы нефрагментированы и каталоги нефрагментированы да еще и NTFS - удаление будет происходить быстро. А вот на FAT да с фрагментированнымим файлами и каталогами (internet temporary files - изобилует такими) удаление будет происходить долго.
Команды ОС Del/DelTree оптимизированы специально для быстрого удаления большого числа файлов - помечают сразу все файлы каталога как удаленные и после чего корректируют таблицу FAT с наименее возможным количеством обращений к диску. Попробуйте для интереса (только корзину отключить!) ;>
Джо (2006-02-18 04:21:00) [33]Создал только что 10000 файлов, функция DeleteFile в цикле удалила их практически мгновенно, примерно за 1 сек.
Defunct (2006-02-17 20:34:00) [34]быстрее всего работает команда
deltree *.*