2015-04-15 4 views
0

Я пытаюсь сохранить несколько объектов, которые пользователь создает для двоичного файла. Пока я могу создать двоичный файл одного объекта.Сохранение нескольких объектов в двоичном файле

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 (путь)

ответ

1

Вы можете изменить 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); 
} 
+0

Спасибо большое !! Он отлично работал –

Смежные вопросы