실제 매핑이지만 파일을 찾지 않고 무엇을 다시 읽는지 확인하는 것이 중요합니다.)
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode, Pack = 1)]
public struct FileRecord
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 56)]
public char[] ID;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 56)]
public char[] Name;
public int Gender;
public float height;
//...
}
class Program
{
protected static T ReadStruct<T>(Stream stream)
{
byte[] buffer = new byte[Marshal.SizeOf(typeof(T))];
stream.Read(buffer, 0, Marshal.SizeOf(typeof(T)));
GCHandle handle = GCHandle.Alloc(buffer, GCHandleType.Pinned);
T typedStruct = (T)Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(T));
handle.Free();
return typedStruct;
}
static void Main(string[] args)
{
using (Stream stream = new FileStream(@"test.bin", FileMode.Open, FileAccess.Read))
{
FileRecord fileRecord = ReadStruct<FileRecord>(stream);
}
}
게시 한 코드는 C 나 C++와 유사합니다. C#에는'typedef '가 없습니다. –
@ 존 : OP가 그가 알고있는 언어로 파일을 설명하고 있기 때문에 C#으로 파일을 열 수 있도록 도와 줄 수 있다고 생각합니다. –
파일 구조를 알고 있다고 생각합니까? 그렇지 않으면 내용 해석에 어려움을 겪을 것입니다. – Tony