當我打開一個用於解壓縮其內容的文件時,出現以下異常。當我在Windows資源管理器中選擇文件時,或者將鼠標懸停在顯示工具提示上時,會發生這種情況。使用File.OpenRead打開文件時發生System.IOException
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:
有沒有一種方法只是等到文件不再被使用,然後讀取它?基本上我只是觀察任何新的zip文件的文件夾,解壓zip文件的內容,然後刪除它。
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;
事件處理程序:
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);
}
完整的源代碼示例工作任何有關它的最終解決方案? – Kiquenet 2013-07-30 05:59:19