我使用了lib Nunrar
site来提取.rar
文件:
RarArchive.WriteToDirectory(fs.Name, Path.Combine(@"D:\DataDownloadCenter", path2), ExtractOptions.Overwrite);
解压缩工作正常,但我不能在此操作后解压缩删除原始压缩文件
System.IO.File.Delete(path);
因为文件被另一个进程使用 洞功能:
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 { }
我可以在解压缩后删除压缩文件吗?
答案 0 :(得分:1)
我不知道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 { }
}
}
即使fs
不包含path
,这种方式.rar
也会关闭。如果文件名中存在fs
,则只关闭rar
。
此外,库是否有自己的流处理?它可以有一个关闭它的方法。
答案 1 :(得分:0)
我在nunrar,nether close()或using语句中也遇到了这个问题,似乎可以解决此问题。 不幸的是,文档很稀少,所以现在使用SharpCompress library是nunrar库according to the devs of nunrar的分支。SharpCompress上的文档也很稀少(但是更少),所以这是我使用的方法:< / p>
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安装。此方法适用于SharpCompress v0.22.0(撰写本文时为最新版本)