Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Can';t访问已被其他进程使用的文件_C#_Wpf_File_Mvvm_Zip - Fatal编程技术网

C# Can';t访问已被其他进程使用的文件

C# Can';t访问已被其他进程使用的文件,c#,wpf,file,mvvm,zip,C#,Wpf,File,Mvvm,Zip,嗨,我在我的WPF应用程序中有一个按钮,它从zip中提取一组文件。我需要处理解压缩文件夹中的文件。但在提取之后,若我访问那个文件,我会得到一个异常,声明“文件已被其他进程使用,无法访问”,就像那个样。 我使用了Stream.flush()、Stream.Close()、Stream.Dispose()。没有一个是有用的 var zipFilePath = @"C:\Output.zip"; var tempFolderPath = @"C:\Unzipped"; using (Pac

嗨,我在我的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',因为它正被另一个进程使用。”
我怎样才能解决它

您应该通过将IDisposable资源包装在using语句中来处理这些资源:

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);
        }
    }
}