Delphi: Copier des Fichiers à partir du dossier avec le progrès en Général. CopyFileEx?
J'ai trouvé des exemples de CopyFileEx avec le progrès, mais j'ai besoin de copier des fichiers à partir d'un dossier avec l'ensemble des progrès réalisés.
Quelqu'un peut-il fournir des informations comment faire? Ou est-il une bonne alternative (composant, fonction)?
Grand merci pour l'aide!!!
OriginalL'auteur maxfax | 2011-06-15
Vous devez vous connecter pour publier un commentaire.
Bien, j'ai eu une réponse, mais je n'en ai juste eu le temps de creuser ça 🙁 Mais ici, il est de toute façon, j'ai écrit cela il y a quelques années dans le cadre d'un programme qui a été appelé "CopyFilesAndFailGraceFully.exe" 🙂 j'ai modded un peu à côté de la reprise des trucs qui gère à défaut des disques durs si elle peut donc PAS ENTIÈREMENT TESTÉ, mais de l'exécuter comme un simple test.
Vous pouvez appeler pour obtenir un récursif filecount, taille du fichier ou Copier les fichiers dans un dossier vers un nouveau dossier. Ou Mod pour votre situation particulière 🙂 de toute façon c'est un exemple de ce que vous avez besoin.
Son Objet (Comme vous le voyez) pour l'utiliser (en gros):
Vous aurez besoin d'un couple de vars bien nommé.
Déclarer votre rappel:
et à mettre en œuvre:
Alors appel en tant que de besoin 🙂 par exemple:
Se sentir libre 🙂 il pourrait être optimisée - le programme original a été l'un de ceux "nous avons besoin de cette" quickies qui n'ont pas trop d'effort mis dans ce qui est encore utilisé sur une base quotidienne 🙂
Delphi 7, il y a un bug dans votre code, "Annulé: Boolean;" est traité comme un OCTET, mais WinApi fonction CopyFileEx s'attend à ce natif de type BOOL (4 OCTETS DWORD) et CopyFileEx échoue avec ERROR_REQUEST_ABORTED à chaque fois.
Windows 7 ici, votre code ne fonctionne pas sur CopyFileEx il a quelque chose à voir avec la mise en mémoire tampon et il semble que c'est un Win 7 bug spécifique
OriginalL'auteur Despatcher
Voici ma solution sans WinApi.
Tout d'abord, une procédure pour copier un fichier:
Maintenant, la collecte des fichiers de répertoire et de calculer la taille totale de progrès.
Veuillez noter que la procédure nécessite une instance de la classe TStringList où seront stockées les chemins de fichiers.
Et, enfin, l'exemple d'utilisation:
Expérimenter avec la taille de la mémoire tampon de ma améliorer les performances. Cependant, il est assez rapide comme il est maintenant. Peut-être même plus rapide que la copie avec ce ballonnement Vista/Win 7 boîtes de dialogue.
Aussi c'est la solution rapide à qui j'ai écrit il ya quelques années pour d'autres forum, il peut contenir quelques bugs. Donc à utiliser à vos propres risques 😉
Je n'étais pas celui qui downvoted vous, mais votre CopyFileWithProgress mise en œuvre est un piètre substitut pour toutes les choses supplémentaires CopyFileEx n' (copie des attributs de fichier, horodateurs, NTFS et les autres flux de données, le transfert de blocs en parallèle à partir des serveurs distants, le cryptage de la destination).
+1 de moi afin de compenser pour les lâches, décerné en bas de vote.
Je suis d'accord avec @Craig, c'est une sacrément mauvaise solution au problème. Et le truc, c'est qu'il est si facile à utiliser
CopyFileEx
.Jusqu'à droit de vote de mauvaise réponses parce que vous vous sentez désolé pour le bénéficiaire de la baisse de vote n'est pas très utile pour les autres visiteurs du site. Oui la personne qui a répondu peut-être à leur sentiments un peu mal, mais de direction vers une mauvaise solution (c'est ce qu'un vote n') est pire à mon avis.
OriginalL'auteur Wodzu
Ajouter la taille de fichier pour tous les fichiers avant de commencer. Ensuite, vous pouvez convertir manuellement les progrès de chaque fichier dans un progrès d'ensemble.
Ou de l'utilisation
SHFileOperation
et obtenir le système d'exploitation natif de copie de fichier de progression.Est-il normal à compter de la taille des fichiers que j'ai besoin de l'aide de la méthode FindFirst->Taille?
Le meilleur moyen que je connaisse pour obtenir la taille du fichier est via
GetFileAttributesEx
. Si vous savez à l'avance que tous les fichiers sont de taille similaire alors vous pouvez sauter cette partie et donner à chaque fichier, une proportion égale de l'100% de progression.OriginalL'auteur David Heffernan
La meilleure solution pour moi (pour copier les 20 MO et pas souvent) est d'utiliser CopyFileEx dans une version lite. Un but principal de ma douce n'est pas de la copie.
OriginalL'auteur maxfax