-3

私は、基本的にファイル コンテナーのように機能し、ファイルを 1 つにまとめるというコンセプトのプロジェクトに取り組んでいます。これまでのところ、ファイルのインデックス作成用に最初に 2 MB が割り当てられた「コンテナー」ファイルを作成しました。この部分は、ファイル名、オフセット、ファイルサイズなどの情報を格納する XML の単純な部分です。残りは、2 MB が割り当てられた後にフォークされたコンテナーに追加されたファイルです。

現在、コンテナを作成してファイルを追加すると、魅力的に機能します。問題は、さらに追加したい場合、XmlDocument は保存後に残りのコンテンツを消去することです。

私の質問は: XML を使用してインデックスを作成する必要がありますか? はいの場合、損失なしで更新する方法、または別の方法で処理する必要がありますか?

アドバイスありがとうございます!

4

2 に答える 2

1

別の方法を試しました。

次のようなシリアル化可能なクラスを作成しました。

[Serializable]
public class FileEntry
{
    public string Name { get; set; }
    public byte[] Content { get; set; }
}

クラス処理ファイル内:

public void AddFiles(string[] Files)
{
    int index = _files.Count;
    foreach (string file in Files)
    {
    {
        _files.Add(new FileEntry());
        _files[index].Name = Path.GetFileNameWithoutExtension(file);
        _files[index].Content = File.ReadAllBytes(file);
        index++;
    }

    byte[] bytes = null;
    BinaryFormatter serializer = new BinaryFormatter();
    using (MemoryStream memoryStream = new MemoryStream())
    {
        serializer.Serialize(memoryStream, _files);
        bytes = memoryStream.ToArray();
    }
    File.WriteAllBytes(_filePath, bytes);
}

また:

public List<FileEntry> GetFiles()
{
    byte[] bytes = File.ReadAllBytes(_filePath);
    if (bytes.Length > 0)
    {
        BinaryFormatter serializer = new BinaryFormatter();
        using (MemoryStream memoryStream = new MemoryStream(bytes))
            _files = serializer.Deserialize(memoryStream) as List<FileEntry>;
    }
    return _files;
}

現在、それは魅力のように機能します:)

于 2013-09-18T15:33:35.327 に答える