J'écris une application capable de copier des fichiers sur un partage réseau. Habituellement, les fichiers sont déplacés sur le même disque dur physique. Si vous testez ceci avec Windows Explorer, cette opération sera exécutée très rapidement. Il semble que Windows connaisse le même emplacement et fasse un vrai mouvement et non une copie et une suppression (ce qui serait plus lent).Problème de performances lors du déplacement de fichiers sur des partages réseau
Disons que vous voulez copier un ensemble de fichiers:
\\computer\share\fileA.txt
\\computer\share\fileB.txt
La destination est par exemple:
\\computer\share\subfolder
L'application utilise l'API Windows Shell (je l'ai écrit l'application dans Delphi, mais le problème devrait être le même pour les autres langues):
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);
Unfortu Ce code fait un "copier et supprimer" qui est beaucoup plus lent sur les gros fichiers ou si vous avez beaucoup de fichiers. Comment puis-je éviter ça? Y at-il un moyen de dire l'opération de déplacement, que les dossiers sont sur le même disque dur? Il existe peut-être une autre notation pour le chemin du réseau.
Ou existe-t-il une autre fonction API utilisée par Windows Explorer?
Pour une brève comparaison:
- nombre de fichiers: 260 Taille du fichier
- pour chacun des fichiers: 11 kB
- temps pour se déplacer dans l'Explorateur: 2 sec
- temps pour se déplacer avec SHFILEOPERATION: 20 sec
J'utilise Windows 7 sur mon système de développement, mais il devrait aussi fonctionner sur XP, donc je ne peux pas utiliser le nouveau I Interface FileOperation.
Amitiés
Cela arrive-t-il également si vous mappez d'abord une lettre de lecteur pour le partage? –