C# を使用してバイナリ データを読み込もうとしています。読みたいファイル内のデータのレイアウトに関するすべての情報を持っています。データを「チャンクごと」に読み取ることができます。つまり、データの最初の 40 バイトを取得して文字列に変換し、次の 40 バイトを取得します。
わずかに異なるバージョンのデータが少なくとも 3 つあるため、データを直接構造体に読み込みたいと考えています。「一行ずつ」読むよりも、はるかに正しいと感じます。
私は次のアプローチを試みましたが、役に立ちませんでした:
StructType aStruct;
int count = Marshal.SizeOf(typeof(StructType));
byte[] readBuffer = new byte[count];
BinaryReader reader = new BinaryReader(stream);
readBuffer = reader.ReadBytes(count);
GCHandle handle = GCHandle.Alloc(readBuffer, GCHandleType.Pinned);
aStruct = (StructType) Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(StructType));
handle.Free();
ストリームは、私が読み取りを開始した、開いている FileStream です。AccessViolationExceptio
を使用すると nが得られMarshal.PtrToStructure
ます。
ファイルの末尾にあるデータには関心がないため、ストリームには読み込もうとしているよりも多くの情報が含まれています。
構造体は次のように定義されます。
[StructLayout(LayoutKind.Explicit)]
struct StructType
{
[FieldOffset(0)]
public string FileDate;
[FieldOffset(8)]
public string FileTime;
[FieldOffset(16)]
public int Id1;
[FieldOffset(20)]
public string Id2;
}
この質問を短くするために、サンプルコードは元のコードから変更されています。
ファイルから構造体にバイナリデータを読み込むにはどうすればよいですか?