實際上,有我沒有測試過了一個與struct
類型和StructLayout
直接映射到二進制文件中的數據結構(一個更好的方式實際的映射,但它是尋找它和檢查您讀取該文件得到的是什麼)的問題:
[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'。 – 2011-03-28 18:45:29
@John:我認爲OP使用他知道的語言描述文件,以便我們可以幫助他用C#打開文件。 – 2011-03-28 19:07:46
我假設你知道文件的結構?否則,你將無法解釋內容:) – Tony 2011-03-28 20:45:09