- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在 C# WinForms .NET 3.5 中使用 SevenZipSharp 或/和 Unrar 库。我对具有不同命名的多 rar 文件有这个问题,例如:
somefile01.rar, somefile02.rar, somefile03.rar
.001、.002、003 等等。
如果我将 Unrar 或 SevenZipSharp 指向错误的存档,它将解压该特定存档并解压其余部分。所以我必须指出正确的(除非我做错了什么)。
最好的检查方法是什么?现在我正在检查目录中是否有一个以上的 .rar 文件,如果是,我检查 01.rar。如果只有一个 .rar 和几个 r01,那么我得到 .rar 但这似乎有点不对。
有没有办法让 SevenZip 或 Unrar 仅通过指向任何 .rar 文件来实际解压整个 multi rar 包?或 .001 ?
疯子
编辑:
我尝试使用以下代码获取一个答案中建议的信息,但它未能提供 promise 的信息。 extr.ArchiveFileData 为 zip 返回 0,为任何提供的 rar 返回 32,无论它是 rar 还是 r01。
using (SevenZipExtractor extr = new SevenZipExtractor(fileName)) {
foreach (var var in extr.ArchiveProperties) {
string attributes = var.Name;
object test = var.Value;
if (test == null) {
test = "THIS";
}
MessageBox.Show(attributes.ToString(), test.ToString());
}
foreach (var var in extr.ArchiveFileData) {
MessageBox.Show(var.Attributes.ToString());
}
}
最佳答案
我相信您可以使用 SevenZipExtractor.ArchiveFileData
属性,然后遍历 header 数据以查找相关信息。
RAR header structure 的一部分:
HEAD_FLAGS Bit flags: 2 bytes
0x0001 - Volume attribute (archive volume)
0x0002 - Archive comment present
RAR 3.x uses the separate comment block
and does not set this flag.
0x0004 - Archive lock attribute
0x0008 - Solid attribute (solid archive)
0x0010 - New volume naming scheme (\'volname.partN.rar\')
0x0020 - Authenticity information present
RAR 3.x does not set this flag.
0x0040 - Recovery record present
0x0080 - Block headers are encrypted
0x0100 - First volume (set only by RAR 3.0 and later)
other bits in HEAD_FLAGS are reserved for
internal use
编辑:
当我下载 SevenZipSharp(1 小时前)并发现 SevenZipExtractor
类包含一个属性,该属性列出卷中的每个文件 (VolumeFileNames
)。我想'太棒了!那很容易!',好吧......从来没有那么容易。似乎 VolumeFileNames
工作得很好,但前提是你将它指向卷中的第一个 rar :(
解决方法:
我创建了一种猜测和验证第一卷的方法:
private static string LocateFirstVolume(string filename)
{
var isVolume = false;
var parts = 1u;
using (var extractor = new SevenZipExtractor(filename))
{
isVolume =
extractor.ArchiveProperties.Any(x =>
x.Name.Equals("IsVolume") && x.Value.Equals(true));
parts = (
from x in extractor.ArchiveProperties
where x.Name.Equals("Number of volumes")
select (uint)x.Value).DefaultIfEmpty(1u).SingleOrDefault();
}
if (!isVolume)
return null;
if (parts > 1)
return filename;
if (!Path.GetExtension(filename)
.Equals(".rar", StringComparison.OrdinalIgnoreCase))
{
var rarFile =
Path.Combine(
Path.GetDirectoryName(filename),
Path.GetFileNameWithoutExtension(filename) + ".rar");
if (File.Exists(rarFile))
{
var firstVolume = LocateFirstVolume(rarFile);
if (firstVolume != null)
{
return firstVolume;
}
}
}
var directoryFiles = Directory.GetFiles(Path.GetDirectoryName(filename));
foreach (var directoryFile in directoryFiles)
{
var firstVolume = LocateFirstVolume(directoryFile);
if (firstVolume != null)
{
using (var extractor = new SevenZipExtractor(firstVolume))
{
if (extractor.VolumeFileNames.Contains(filename))
{
return firstVolume;
}
}
}
}
return null;
}
它快速且不完善但有效,您可以根据您的需要进一步完善它。
希望对您有所帮助。
关于c# - 如何在 C# 中使用 SevenZipSharp/Unrar 知道多 rar 文件中哪个 rar 是第一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2317316/
我正在使用 SevenZipSharp 将文件压缩成 zip 文件。有没有办法使用它从内存流创建 zip(意思是,先将文件加载到内存流中)? 谢谢,玛雅人。 最佳答案 我将 SevenZipSharp
我正在使用 vb.net,想知道在提取存档时如何显示正在提取的文件。我已经有了一个解决方法,但它很“作弊”,并且没有真正显示当前正在提取的文件。 Public Class Form1 Priv
我正在尝试使用 SevenZipSharp 压缩和提取文件,但出现以下错误: Can not load 7-zip library or internal COM error! Message: fa
我将使用 sevenzipsharp 从 iso 文件中提取文件到 usb。为此,我从 vs nuget 包管理器下载了 sevenzipsharp 并编写了(实际上我不能:))这段代码。我没有收到任
首先我想做的是: 我有一个文件列表,我想添加到同一个存档中。此文件的文件夹结构应包含在存档中。 我遇到的问题是我无法将文件添加到现有存档中。当我使用 CompressionMode.Create 时,
iv 尝试了许多不同的方法来让它工作,我让它基本工作,但我无法得到 WaitForExit();就像他们在这里一样工作......那么我如何将其转换为与 sevenzip 一起工作?因为我无法让它工作
我在我的项目中引用了 dll 文件:SevenZipSharp.dll 然后在 Form1 的顶部添加: using SevenZip; 然后我创建了一个从按钮点击事件中调用的函数: private
我想使用 SevenZipsharp 来压缩文件,例如将一个 100 MB 的文件压缩成 10 个文件,每个文件 10 MB。我们可以使用 7zip.exe -volume 参数来做同样的事情....
我使用 SevenZipSharp 打包到 7z 文件并从各种文件中解包。它多年来一直运作良好。 今天我有一个 .tgz 存档在第二阶段解包失败: 从 .tgz 中提取 .tar 有效,但解压 .ta
我正在使用 SevenZipSharp 将文件压缩成 zip 文件。我有 2 个问题: 在同一个目标文件上多次使用 CompressFiles 时,它不会追加文件,而是会覆盖它们。 我希望添加文件时不
我在 C# 应用程序中工作,该应用程序通过 shelling out 到 7zip 来处理各种类型的存档文件。正如您所想象的,这是非常糟糕的错误和低性能。 我非常想用 SevenZipSharp 库
我想使用 SevenZipCompressor 将 3 个文件夹压缩到一个文件中。我知道如何压缩单个文件夹。这样的事情可能吗?? 谢谢! 最佳答案 SevenZipCompressor类提供了一个名为
当我尝试提取 zip 文件时出现以下错误: “SevenZip.SevenZipArchiveException:无效存档:打开/读取错误!它是否加密并提供了错误的密码? 如果您的文件是异国情调的文件
我将了解如何使用 SevenZipSharp 库创建 SFX。 首先,我需要说明的是,我找不到任何属性来设置压缩级别,等等。 当我尝试制作文件的 SFX 时,出现此错误: "Object refere
我一直在研究 SevenZipSharp 来创建一个自解压 zip 文件。项目页面说他们有一个特殊的类 SevenZipSfx 可以执行此操作。但是,我已经搜索了对象资源管理器和 0.64 版的文档,
我使用 SevenZipSharp 生成了一个多卷 7z 文件 图书馆。 我遇到的问题是,当我尝试提取文件时,出现关于无效转换的异常: Unable to cast object of type 'S
我创建了 hallo.7z 并使用了 7zxSD_LZMA.sfx 作为模块。我认为我的配置是正确的,但在提取 sfx 时我收到了 7-zip : unsupported method void Cr
我正在尝试在 C# WinForms .NET 3.5 中使用 SevenZipSharp 或/和 Unrar 库。我对具有不同命名的多 rar 文件有这个问题,例如: .rar, r01, r02,
我是一名优秀的程序员,十分优秀!