ZipForge:如何将空文件夹添加到存档?
ZipForge: how to add Empty folder to archive?
标题中的问题。
我没能找到向存档添加空文件夹或在存档内创建空目录的方法。
如果我只是通过掩码添加文件和文件夹,它工作正常,但我必须一个一个地添加文件而不是一起添加(这是有原因的)。
如何在存档中创建一个空目录?
ZIP 文件不明确支持文件夹的概念。相反,您使用路径分隔符指定文件名,ZIP 文件工具以这种方式推断预期的结构。
因此,您伪造 空文件夹的方法是创建一个空文件,其名称以尾随路径分隔符结尾。
我不知道 ZipForge,但在内置的 TZipFile
中你会这样做:
ZipFile := TZipFile.Create;
try
ZipFile.Open('C:\desktop\temp.zip', zmWrite);
ZipFile.Add(TBytes(nil), 'foo/');
finally
ZipFile.Free;
end;
我找到了一种更正确地创建空文件夹的方法。
正如 David Heffernan 所说,我们应该添加标题为我们的文件夹的空文件:
FullFolderName = 'foo\bar'
ZipForge.AddFromBuffer(FullFolderName, nil^, 0);
注意: bar 是我们的空文件夹,应该在 foo 文件夹中。不要在路径末尾放置反斜杠。
然后我们应该更改存档中"folder"的属性,因为我们的"folder"与文件具有相同的属性。为此,我们应该调用:
ZipForge.ChangeFilesAttr(FullFolderName, ZFDirectoryAttr);
ZFDirectoryAttr 是在 ZipForge.pas 中声明的常量,等于 16。
标题中的问题。 我没能找到向存档添加空文件夹或在存档内创建空目录的方法。
如果我只是通过掩码添加文件和文件夹,它工作正常,但我必须一个一个地添加文件而不是一起添加(这是有原因的)。
如何在存档中创建一个空目录?
ZIP 文件不明确支持文件夹的概念。相反,您使用路径分隔符指定文件名,ZIP 文件工具以这种方式推断预期的结构。
因此,您伪造 空文件夹的方法是创建一个空文件,其名称以尾随路径分隔符结尾。
我不知道 ZipForge,但在内置的 TZipFile
中你会这样做:
ZipFile := TZipFile.Create;
try
ZipFile.Open('C:\desktop\temp.zip', zmWrite);
ZipFile.Add(TBytes(nil), 'foo/');
finally
ZipFile.Free;
end;
我找到了一种更正确地创建空文件夹的方法。 正如 David Heffernan 所说,我们应该添加标题为我们的文件夹的空文件:
FullFolderName = 'foo\bar'
ZipForge.AddFromBuffer(FullFolderName, nil^, 0);
注意: bar 是我们的空文件夹,应该在 foo 文件夹中。不要在路径末尾放置反斜杠。
然后我们应该更改存档中"folder"的属性,因为我们的"folder"与文件具有相同的属性。为此,我们应该调用:
ZipForge.ChangeFilesAttr(FullFolderName, ZFDirectoryAttr);
ZFDirectoryAttr 是在 ZipForge.pas 中声明的常量,等于 16。