Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как быстро удалить файл? [D7, WinXP]


Страницы:   1 2

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 *.*


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо