0
빠른 멍청한 놈 질문, 나는 위해 throw되는 예외를 다시 역 직렬화 할 때C# DataTable의 바이너리 직렬화는 정말 날 귀찮게한다
직렬화
'입력 스트림이 유효한 바이너리 포맷하지 않습니다'그러나 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을 바이너리로 설정할 수 있으므로 가져온 데이터가 꽤 큰만큼 공간을 절약 할 수 있습니다. –
방금 단위 테스트로 메소드를 던졌습니다 생성 된 데이터. 코드가 정상적으로 작동하는 것 같습니다. 문제와 관련된 샘플 데이터가 있습니까? 저장된 실제 파일의 파일 크기 불일치를 확인 했습니까? –