Я пытаюсь сериализовать свой MMF в файл, и вот код:
class MMF {
private const string filename = @"c:\NFS";
private long offset = 0;
private long length = 194;
private byte[] buffer;
public MMF() {
using (var mmf =
MemoryMappedFile.CreateFromFile(filename, FileMode.OpenOrCreate, null, offset + length, MemoryMappedFileAccess.ReadWriteExecute)) {
using (var accessor = mmf.CreateViewAccessor(offset, length, MemoryMappedFileAccess.ReadWriteExecute)) {
buffer = new byte[194];
/*FS fs = new FS();
fs.Files[0].Path = "test";
accessor.WriteArray<byte>(0, buffer, 0, (int)length);*/
accessor.ReadArray<byte>(0, buffer, 0, (int)length);
FS fs = (FS)ToObject(buffer);
Console.WriteLine(fs.Files[0].Path);
}
}
}
private byte[] ToByteArray(object source) {
var formatter = new BinaryFormatter();
using (var stream = new MemoryStream()) {
formatter.Serialize(stream, source);
return stream.ToArray();
}
}
private object ToObject(byte[] source) {
var formatter = new BinaryFormatter();
using (var stream = new MemoryStream(source)) {
formatter.Deserialize(stream);
return stream;
}
}
}
В части десериализации я получаю сообщение об ошибке:
Необработанное исключение типа System.Runtime.Serialization.SerializationException произошло в mscorlib.dll
Дополнительная информация: двоичный поток «0» не содержит допустимого двоичного заголовка BinaryHeader. Возможные причины: неверный поток или изменение версии объекта между сериализацией и десериализацией.
Как правильно десериализовать файл? В чем моя ошибка?
спасибо
FS
, не помогло бы. Кроме того, почему вы используете MMF, а не толькоFileStream
? - person leppie   schedule 16.08.2012ISerializable
, и все должно быть в порядке. - person leppie   schedule 16.08.2012