Я пишу приложение, которое может копировать файлы в общий сетевой ресурс.Обычно файлы перемещаются на один и тот же физический жесткий диск.Если вы протестируете это в Windows Explorer, эта операция будет выполнена очень быстро.Кажется, что Windows знает об одном и том же месте и делает реальное движение, а не копирует и удаляет (что будет медленнее).
Допустим, вы хотите скопировать набор файлов:
\\computer\share\fileA.txt
\\computer\share\fileB.txt
Назначение, например:
\\computer\share\subfolder
Приложение использует Windows Shell API (я написал приложение в Delphi, но проблема должна быть такой же и для других языков):
with SHFileOpStruct do
begin
Wnd := 0;
wFunc := FO_MOVE;
pFrom := PChar ('\\computer\share\fileA.txt'+#0
+'\\computer\share\fileB.txt'+ #0#0);
pTo := PCahr ('\\computer\share\subfolder' + #0#0);
fFlags := FOF_SILENT or FOF_NOCONFIRMATION;
end;
Result := SHFileOperationW (SHFileOpStruct);
К сожалению, этот код выполняет «копирование и удаление», что значительно медленнее для больших файлов или если у вас много файлов.Как я могу избежать этого?Можно ли как-то определить операцию перемещения, что папки находятся на одном жестком диске?Возможно, есть некоторые другие обозначения для сетевого пути.
Или есть другая функция API, которая используется проводником Windows?
Для краткого сравнения:
- количество файлов: 260
- размер файла для каждого из файлов: 11 кБ
- время для перемещения в Проводнике: 2 с
- время для перемещения с SHFILEOPERATION: 20 с
I 'Я использую Windows 7 в моей системе разработки, но она также должна работать на XP, поэтому я не могу использовать новый интерфейс IFileOperation.
С уважением