Sat83
Messages postés166Date d'inscriptionmardi 11 novembre 2003StatutMembreDernière intervention13 octobre 2008
-
14 janv. 2008 à 16:49
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 2014
-
15 janv. 2008 à 12:51
Bonjour,
Je dois réaliser un programme qui rapatrie des fichiers de donnée d'un répertoire a un autre. Donc en gros je "scanne" un répertoire a la recherche de fichier, et dès qu'il y en a un je le deplace dans un autre.
Jusque là pas de soucis. Le problème c'est qu'il arrive que je tente de deplacer un fichier qui n'a pas été completement écrit,et donc j'ai droit à une belle exception.
Après quelques recherches pour résoudre ce problème, voilà la solution que j'ai adoptée:
--------------------------------------------------------------------------------------
int Handle;
Handle= FileOpen( f , fmShareExclusive ); // J'essai d'ouvrir le fichier en mode exclusif
// Si le Handle est different de -1 le fichier est non-utilisé if (Handle <> -1) then
begin
FileClose(Handle) ;
MaProcedureDeDeplacementDeFichier;
end;
--------------------------------------------------------------------------------------
Cette solution semble fonctionnée, mais je me dis que ce n'est peut etre pas la plus élegante et qu'il doit en exister d'autres...
Donc j'aimerais savoir si cette solution vous semble adaptée ou si vous avez eventuellement d'autres idées?
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 201413 15 janv. 2008 à 12:51
Salut,
Windows est réputé assez lent en matière d'ouverture de fichier, donc c'est dommage d'ouvrir tous les fichiers.
Pourquoi ne pas avoir simplement pas capté l'exception avec un try ... except ?
Si l'exception te gène, tu peux aussi passer par le Win32, avec CopyFile. Elle ne déclenchera pas d'exception, mais tu pourras tester sa valeur de retour pour savoir si la copie s'est bien déroulée.