私はSharpZipLibZipEntry
を使用してファイルを zipfile に追加するツールに取り組んでおり、必要なメタデータを保存するためのコメントを付けています。(これらのメタデータを処理する方法が他にもあることは知っていますが、回避できるのであれば、ソリューションの再設計は避けたいと思います。)
ファイルとメタデータを zipfile に書き込むために使用される [少し簡略化された] コードは次のとおりです。
public static void AddFileToZip(string path, Guid metadata)
{
using (ZipFile zipFile = new ZipFile(__zipName))
{
zipFile.BeginUpdate();
zipFile.Add(path);
zipFile.CommitUpdate();
zipFile.Close();
}
// Close and reopen the ZipFile so it can find the ZipEntry:
using (ZipFile zipFile = new ZipFile(__zipName))
{
string cleanPath = ZipEntry.CleanName(path);
zipFile.BeginUpdate();
zipFile.GetEntry(cleanPath).Comment = metadata.ToString("N");
zipFile.CommitUpdate();
zipFile.Close();
}
}
このためのテスト ハーネスは次のようになります。
[Test]
public void ArchiveCreationTests()
{
// Hard-code some variables
string testFile = @"C:\Users\owen.blacker\Pictures\Ddraig arian.png";
Guid guid = Guid.NewGuid();
MyClassName.AddFileToZip(testFile, guid);
Assert.IsTrue(File.Exists(__zipName), "File does not exist: " + __zipName);
string cleanName = ZipEntry.CleanName(testFile);
ZipFile zipfile = new ZipFile(__zipName);
Assert.GreaterOrEqual(
zipfile.FindEntry(cleanName, true),
0,
"Cannot file ZipEntry " + cleanName);
ZipEntry zipEntry = zipfile.GetEntry(cleanName);
StringAssert.AreEqualIgnoringCase(
guid.ToString("N"),
zipEntry.Comment,
"Cannot validate GUID comment.");
}
これで zipfile が作成されました — 実際にテスト イメージが含まれていますDdraig arian.png
—ZipEntry
は正常に検出されていますが、StringAssert
呼び出しは常に失敗しています。書き込まれていないために失敗しているのか、読み取られていないために失敗しているのか、完全にはわかりません。
にアクセスするには / を使用ZipFile
する必要があることはわかっていますが、 と を使用しているため、なぜ機能しないのかわかりません。ZipEntry
ZipEntry.Comment
ZipInputStream
Comment
ZipFile
ZipEntry
誰にもアイデアはありますか?
(ファイル インデックスにまだ書き込まれていない可能性AddFileToZip
があるため、ZipFile.GetEntry
呼び出しが常に失敗していたため、少し奇妙に閉じて再度開くことができます。そして、はい、私のテスト ファイルは確かにシルバー ドラゴンです。)ZipEntry