簡體   English   中英

將多個對象保存到二進制文件

[英]Saving multiple objects to binary file

我正在嘗試將用戶創建的多個對象保存到二進制文件中。 到目前為止,我已經能夠創建一個對象的二進制文件。

 public class BinSerializerUtility
    {

        public void BinaryFileSerialize(object obj, string filePath)
        {
            FileStream fileStream = null;
            try
            {
                fileStream = new FileStream(filePath, FileMode.Create);
                BinaryFormatter b = new BinaryFormatter();
                b.Serialize(fileStream, obj);
            }
            catch
            {
                throw;
            }
            finally
            {
                if (fileStream != null)
                    fileStream.Close();
            }

        }

MainForm

private void SaveToFile(string filename)
        {
            for (int index = 0; index < animalmgr.Count; index++)
            {
                Animal animal = animalmgr.GetAt(index);
                BinSerializerUtility BinSerial = new BinSerializerUtility();
                BinSerial.BinaryFileSerialize(animal, filename);

            }
        }

private void mnuFileSaveAs_Click(object sender, EventArgs e)
        {
            //Show save-dialogbox
            if(saveFileDialog1.ShowDialog() == DialogResult.OK)
            {
                string thefilename = saveFileDialog1.FileName;
                SaveToFile(thefilename);
            }
        }

我不太確定如何制作它,以便將多個對象保存到二進制文件中。 你有什么建議嗎?

我確實嘗試了以下方法:

public byte[] SerializeArray(object obj)
        {
            byte[] serializedObject = null;
            MemoryStream memStream = null;

            try
            {
                memStream = new MemoryStream();
                BinaryFormatter binFormatter = new BinaryFormatter();

                binFormatter.Serialize(memStream, obj);
                memStream.Seek(0, 0);               //set position at 0,0
                serializedObject = memStream.ToArray();
            }
            finally
            {
                if (memStream != null)
                    memStream.Close();
            }

            return serializedObject;    // return the array.
        }

但是問題是我不知道在哪里插入fileName (路徑)

您可以修改BinaryFileSerialize以接受數組:

public void BinaryFileSerialize(object [] objs, string filePath) 然后,您可以遍歷該數組以在數組中插入每個項目:

FileStream fileStream = new FileStream(filePath, FileMode.Create);
BinaryFormatter b = new BinaryFormatter();
foreach(var obj in objs) {
    b.Serialize(fileStream, obj);
}

SaveToFile函數:

private void SaveToFile(string filename)
{
    //Animal array
    Animal [] animals = new Animal[animalmgr.Count];
    for (int index = 0; index < animalmgr.Count; index++)
    {
        animals[index] = animalmgr.GetAt(index);
    }
    BinSerializerUtility BinSerial = new BinSerializerUtility();
    BinSerial.BinaryFileSerialize(animals, filename);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM