0
快速noob問題,其真正困擾我,我序列化的DataTable陣列但反序列化它,當一個異常被拋出「的輸入流是不是一個有效的二進制格式」C#的DataTable二進制序列化
系列化
public static bool saveToFile(DataTable[] NW, string path)
{
try
{
using (var stream = new MemoryStream())
{
IFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream,NW);
stream.Close();
File.WriteAllBytes(path,stream.ToArray());
}
return true;
}
catch(Exception ex)
{
MessageBox.Show("ERROR" + Environment.NewLine + ex.Message);
return false;
}
}
反序列化
public static DataTable[] loadFromFile(string path)
{
try
{
byte[] buffer = File.ReadAllBytes(path);
var stream = new MemoryStream(buffer);
IFormatter formatter = new BinaryFormatter();
return (DataTable[])formatter.Deserialize(stream);
}
catch(Exception ex)
{
MessageBox.Show("ERROR" + Environment.NewLine + ex.Message);
return null;
}
}
我也嘗試過不MemoryStream的,而是使用File.Open返回文件流(STR荷蘭國際集團的路徑,FileMode.Create /開)
而且,只需將其寫入文件之前,這是字節數組的外觀:
當看完
它看起來好像沒有將所有內容都寫入文件?
謝謝!
是否有必要以二進制格式保存它?如果不是,DataSet具有寫入其中所有DataTable的功能;到一個xml文件中,並且類似地,您可以從保存的xml文件中讀取。 –
它不是強制性的二進制,試圖用二進制做它,所以我可以在每個表上設置RemotingFormat爲二進制,因此它節省一些空間,因爲導入的數據是相當大的 –
我剛剛把你的方法引入單元測試與生成的數據。 你的代碼似乎工作正常。 你有問題的樣本數據嗎? 您是否檢查過保存的物理文件的文件大小差異? –