英文:
Access denied deleting zip file with zip archive being read
问题
以下是您要翻译的内容:
免责声明:这个问题不涉及Dispose()
方法的应用。也不涉及文件不可访问的问题。我要做的是以正确的方式关闭存档,而不是依赖于对象的释放。
以下方法有效。
ZipFile.ExtractToDirectory(file, path, true);
File.Delete(file);
这个方法会因为文件被另一个进程使用而失败,抛出异常:由于另一个进程正在使用文件 'c:\temp...\file.zip',所以无法访问该文件。
ZipFile.ExtractToDirectory(file, path, true);
ZipArchive archive = ZipFile.OpenRead(file);
File.Delete(file);
我通过释放对象来解决了这个问题。
ZipFile.ExtractToDirectory(file, path, true);
ZipArchive archive = ZipFile.OpenRead(file);
archive.Dispose();
File.Delete(file);
我担心释放对象不是正确的方法。不知何故,我觉得应该有一种在删除文件之前关闭文件的方法。但是,没有这样的方法。我进行了谷歌搜索,但得到的结果与内存流、一般访问被拒绝、手动设置属性有关。
英文:
disclaimer This question isn't about the appliction of Dispose()
. It's not about files being inaccessible. I'm about closing the archive in the proper way without relying on disposing the object.
The following works.
ZipFile.ExtractToDirectory(file, path, true);
File.Delete(file);
This fails with exception: The process cannot access the file 'c:\temp...\file.zip' because it is being used by another process.
ZipFile.ExtractToDirectory(file, path, true);
ZipArchive archive = ZipFile.OpenRead(file);
File.Delete(file);
I've resolved it by disposing the object.
ZipFile.ExtractToDirectory(file, path, true);
ZipArchive archive = ZipFile.OpenRead(file);
archive.Dispose();
File.Delete(file);
I am worried that disposing the object is not the correct approach. Somehow I feel there should be a way to close the file before deletion. There is no such method, however. I googled it but the results I got were about memory streams, general access being denied, manual setting of the attributes.
答案1
得分: 1
ZipFile
和 ZipArchive
实现了 IDisposable
接口,这意味着它会在作用域结束时自动调用 Dispose()
方法。请尝试使用以下代码块:
void SomeMethod(string file)
{
using ZipArchive archive = ZipFile.OpenRead(file);
...
}
英文:
The ZipFile
and ZipArchive
implement IDisposable
, which means that it'll invoke a call to Dispose()
automagically at the end of the scope. Try using
block as below.
void SomeMethod(string file)
{
using ZipArchive archive = ZipFile.OpenRead(file);
...
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论