C# Can';t访问已被其他进程使用的文件
嗨,我在我的WPF应用程序中有一个按钮,它从zip中提取一组文件。我需要处理解压缩文件夹中的文件。但在提取之后,若我访问那个文件,我会得到一个异常,声明“文件已被其他进程使用,无法访问”,就像那个样。 我使用了Stream.flush()、Stream.Close()、Stream.Dispose()。没有一个是有用的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
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);
}
}
}