我使用lib Nunrar
site解压了一个.rar
文件:
RarArchive.WriteToDirectory(fs.Name, Path.Combine(@"D:\DataDownloadCenter", path2), ExtractOptions.Overwrite);
解压工作正常,但在此提取操作后,我不能删除原始压缩文件
System.IO.File.Delete(path);
由于该文件由另一个进程使用,因此使用了hole函数:
try
{
FileStream fs = File.OpenRead(path);
if(path.Contains(".rar")){
try
{
RarArchive.WriteToDirectory(fs.Name, Path.Combine(@"D:\DataDownloadCenter", path2), ExtractOptions.Overwrite);
fs.Close();
}
catch { }
}
catch { return; }
finally
{
if (zf != null)
{
zf.IsStreamOwner = true; // Makes close also shut the underlying stream
zf.Close(); // Ensure we release resources
}
}
try
{
System.IO.File.Delete(path);
}
catch { }
那么我可以在解压后删除压缩文件吗?
发布于 2013-07-04 18:52:13
我不知道zf
是什么,但您也可以将它包装在using
语句中。尝试将您的FileStream fs
部件替换为以下内容
using( FileStream fs = File.OpenRead(path))
{
if(path.Contains(".rar"))
{
try
{
RarArchive.WriteToDirectory(fs.Name, Path.Combine(@"D:\DataDownloadCenter", path2), ExtractOptions.Overwrite);
}
catch { }
}
}
这样,即使path
不包含.rar
,也会关闭fs
。只有在文件名中存在rar
时,才会关闭fs
。
另外,这个库有自己的流处理吗?它可能有一个关闭它的方法。
发布于 2018-10-17 03:33:35
我在nunrar上也遇到了这个问题,nether close()或using语句似乎可以解决这个问题。不幸的是,文档很少,所以我现在使用SharpCompress library它是nunrar库的一个分支,在SharpCompress上的according to the devs of nunrar.The文档也很少(但更少),所以我的方法是:
private static bool unrar(string filename)
{
bool error = false;
string outputpath = Path.GetDirectoryName(filename);
try
{
using (Stream stream = File.OpenRead(filename))
{
var reader = ReaderFactory.Open(stream);
while (reader.MoveToNextEntry())
{
if (!reader.Entry.IsDirectory)
{
Console.WriteLine(reader.Entry.Key);
reader.WriteEntryToDirectory(outputpath, new ExtractionOptions() { ExtractFullPath = true, Overwrite = true });
}
}
}
}
catch (Exception e)
{
Console.WriteLine("Failed: " + e.Message);
error = true;
}
if (!error)
{
File.Delete(filename);
}
return error;
}
将以下库添加到顶部
using SharpCompress.Common;
using SharpCompress.Readers;
使用nuget.This方法安装适用于SharpCompress v0.22.0(撰写本文时的最新版本)
https://stackoverflow.com/questions/17467951
复制相似问题