Je reçois l'exception suivante lorsque j'ouvre un fichier pour décompresser son contenu. Cela se produit lorsque le fichier est sélectionné dans l'Explorateur Windows ou que la souris affiche une info-bulle.System.IOException lors de l'ouverture du fichier avec File.OpenRead
System.IO.IOException was unhandled
Message=The process cannot access the file 'D:\Documents\AutoUnZip\Zips\MVCContrib.Extras.release.zip' because it is being used by another process.
Source=mscorlib
StackTrace:
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share)
at System.IO.File.OpenRead(String path)
at AutoUnzip.SelectFolderForm.w_Changed(Object sender, FileSystemEventArgs e) in D:\Projects\WindowsForms\AutoUnzip\AutoUnzip\SelectFolderForm.cs:line 37
at System.IO.FileSystemWatcher.OnCreated(FileSystemEventArgs e)
at System.IO.FileSystemWatcher.NotifyFileSystemEventArgs(Int32 action, String name)
at System.IO.FileSystemWatcher.CompletionStatusChanged(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* overlappedPointer)
at System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* pOVERLAP)
InnerException:
Est-il possible d'attendre que le fichier ne soit plus utilisé et de le lire? Fondamentalement, je regarde juste un dossier pour tous les nouveaux fichiers zip, décompressez le contenu du fichier zip, puis supprimez-le.
FileSystemWatcher watcher = new FileSystemWatcher("C:\\Path\\To\\Folder\\");
watcher.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.FileName;
watcher.Filter = "*.zip";
watcher.Created += new FileSystemEventHandler(w_Changed);
// Begin watching.
watcher.EnableRaisingEvents = true;
Gestionnaire d'événements:
void w_Changed(object sender, FileSystemEventArgs e)
{
// IOException on following line
using (ZipInputStream s = new ZipInputStream(File.OpenRead(e.FullPath)))
{
...
}
// delete the zip file
File.Delete(e.FullPath);
}
une solution finale avec l'échantillon complet du code source de travail à ce sujet? – Kiquenet