Lorsque vous travaillez avec des fichiers dans plusieurs répertoires, il est crucial de s'assurer que les fichiers sont entièrement écrits avant de tenter de les copier. Cela évite l'erreur « Impossible de copier le fichier, car il est utilisé par un autre processus ».
Dans le code fourni, un FileSystemWatcher est créé pour surveiller les événements de création de fichiers dans un répertoire spécifié. Lorsqu'un nouveau fichier est créé, un gestionnaire d'événements le copie dans un autre répertoire. Cependant, lors de la copie de fichiers plus volumineux, le problème survient en raison d'une copie prématurée, entraînant l'erreur susmentionnée.
Pour résoudre ce problème, une solution de contournement est nécessaire. Considérez les méthodes suivantes :
Méthode 1 :
private bool IsFileLocked(FileInfo file) { FileStream stream = null; try { stream = file.Open(FileMode.Open, FileAccess.ReadWrite, FileShare.None); } catch (IOException) { // the file is unavailable because it is: // - still being written to // - being processed by another thread // - does not exist (has already been processed) return true; } finally { if (stream != null) stream.Close(); } // file is not locked return false; }
Méthode 2 :
const int ERROR_SHARING_VIOLATION = 32; const int ERROR_LOCK_VIOLATION = 33; private bool IsFileLocked(string file) { // check that problem is not in destination file if (File.Exists(file) == true) { FileStream stream = null; try { stream = File.Open(file, FileMode.Open, FileAccess.ReadWrite, FileShare.None); } catch (Exception ex2) { int errorCode = Marshal.GetHRForException(ex2) & ((1 << 16) - 1); if ((ex2 is IOException) && (errorCode == ERROR_SHARING_VIOLATION || errorCode == ERROR_LOCK_VIOLATION)) { return true; } } finally { if (stream != null) stream.Close(); } } return false; }
Ces méthodes peuvent être utilisé pour déterminer si un fichier est verrouillé avant de tenter de le copier. Cela garantit que l'opération de copie se produit uniquement lorsque le fichier est entièrement écrit, éliminant ainsi l'erreur « Impossible de copier le fichier, car il est utilisé par un autre processus ».
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!