2013-01-10 120 views
1

您好我正在我的WPF应用程序中从zip中提取一组文件的按钮。我需要使用解压缩文件夹中的文件。但提取后,如果我访问该文件,我不断收到一个异常,指出“文件已被其他进程使用,无法访问”像那样。 我用Stream.flush(),Stream.Close(),Stream.Dispose()。没有一个是有用的。无法访问已被其他进程使用的文件

var zipFilePath = @"C:\Output.zip"; 
var tempFolderPath = @"C:\Unzipped"; 


    using (Package package = ZipPackage.Open(zipFilePath, FileMode.Open, FileAccess.Read)) 
    { 
     foreach (PackagePart part in package.GetParts()) 
     { 

      var target = Path.GetFullPath(Path.Combine(tempFolderPath, part.Uri.OriginalString.TrimStart('/'))); 
      var targetDir = target.Remove(target.LastIndexOf('\\')); 

      if (!Directory.Exists(targetDir)) 
       Directory.CreateDirectory(targetDir); 
      MemoryStream memoryStream = new MemoryStream(); 
      using (Stream source = part.GetStream(FileMode.Open, FileAccess.Read)) 
      // using (Stream source = new FileStream(, FileMode.Open)) 
      { 

       source.CopyTo(File.OpenWrite(target)); 
      // CopyStreamTo(source, memoryStream); 
      } 
     } 

    } 


    MessageBox.Show("Extracted in a folder"); 

      myclass obj=new myclass(@"C:\Unzipped\Something.xml"); 
     // Something.xml has been used by some other process 

提取工作正常。但在解压缩后,当我访问C:\ Unzipped \ something.xml中的文件时,我不断收到此错误。“该进程无法访问文件'C:\ Unzipped \ Something.xml',因为它正在被另一个进程使用。 我该如何解决?

回答

3

应该通过using语句包装处理他们的IDisposable的资源:

using (Package package = ZipPackage.Open(zipFilePath, FileMode.Open, FileAccess.Read)) 
{ 
    foreach (PackagePart part in package.GetParts()) 
    { 
     var target = Path.GetFullPath(Path.Combine(tempFolderPath, part.Uri.OriginalString.TrimStart('/'))); 
     var targetDir = target.Remove(target.LastIndexOf('\\')); 

     if (!Directory.Exists(targetDir)) 
     { 
      Directory.CreateDirectory(targetDir); 
     } 

     using (Stream source = part.GetStream(FileMode.Open, FileAccess.Read)) 
     using (Stream targetFileStream = File.OpenWrite(target)) 
     { 
      source.CopyTo(targetFileStream); 
     } 
    } 
} 
+0

你是真棒人。你解决了我的问题。谢谢..:) – BinaryMee

相关问题