gpt4 book ai didi

c# - 无法访问已被其他进程使用的文件

转载 作者:行者123 更新时间:2023-12-03 10:23:46 24 4
gpt4 key购买 nike

嗨,我在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中的文件时,我仍然收到此错误。
我该如何解决?

最佳答案

您应该通过将IDisposposable资源包装在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);
}
}
}

关于c# - 无法访问已被其他进程使用的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14252040/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com