我认为您应该在重新发明轮子之前查看 SharpZipLib。
对于您的问题的答案,您应该首先将 xml 保存到内存流中,然后将该流复制到您的文件中。(这样你就会知道你是否超过 2mb 大小)我不建议 xml 这样做,2mb 作为起始大小也差不多。我会使用类似二进制读取器/写入器的东西
这仅是示例:
public class FileData
{
public string Filename { get; set; }
public int Size {get; set; }
public int ContainerFileOffset { get; set; }
}
List<FileData> files = new List<FileData>();
using(Stream stream = new ...Stream(...))
{
BinaryWriter writer = new BinaryWriter(stream);
writer.Write(files.Count);
foreach(FileData fd in files)
{
writer.Write(Filename);
writer.Write(Size);
writer.Write(ContainerFileOffset);
}
}
但我认为更好的方法是在文件之前创建一个标题:
File 1 File 2
+--------------------------+--------------+--------------------------+--------------+
| NextOffset|Filename|Size | FileData | NextOffset|Filename|Size | FileData |
+--------------------------+--------------+--------------------------+--------------+
这样您就可以轻松添加/删除文件。
另一个想法可能是在文件末尾写入 fileinfolist。喜欢:
+----------+----------+----------+---------------+------------------------------+
| Filedata | Filedata | Filedata | FileInfoTable | FileInfoTableOffset (4bytes) |
+----------+----------+----------+---------------+------------------------------+
FileInfoTableOffset 将指向 FileInfoTable 的起始地址。如果要读取文件,只需将整个 FileInfoTable 放入内存中,准备好后,将其写回。