C#中怎么读取Struct(结构体)文件!!!!??救救我!!!!

2025-05-12 18:23:25
推荐回答(3个)
回答(1):

首先需要告诉我们,你的DAT文件是怎么存储这些结构啊!
不可能说你的DAT文件里面存储的就是struct A,struct B这种东西。
文件,都是按二进制去存储的信息,当然啦,假如你的信息是字符串编码的,那么这个文件是可以按照字符串去读取的。我不知道这么说你是否明白,举个例子,
假如你要存储一个字符"A",而这个"A"是用ASCII编码的,那么存储在文件里面的数据就是A的ASCII码:1000001,你可以二进制流的形式去读取这个字符,如下:
//先写一个测试文件
System.IO.FileStream fs = new System.IO.FileStream("test.dat", System.IO.FileMode.Create);
fs.WriteByte(65);
fs.Flush();
fs.Dispose();
//打开刚才写的文件
fs = new System.IO.FileStream("test.dat", System.IO.FileMode.Open);
byte data = (byte)fs.ReadByte();
char c = Convert.ToChar(data);//调试的时候可以发现,这个c就是一个A
fs.Dispose();

当然如果文件是存文本,可以用简单的方法去读取:
System.IO.StreamReader sr = new System.IO.StreamReader("test.dat");
string str = sr.ReadToEnd();//直接以字符串的形式去读取,也是可以得到A
sr.Dispose();

因此呢,读一个文件是很简单的事情,关键你要告诉我们,你的数据是怎么写进文件的

回答(2):

这个我做过,但是你要先在c#里面定义一个和c++里面一样的结构体,
我那个写进去是以2进制方式写的,读的时候也用2进制来读。
在c#里面用系统的api来读取就是了
这个函数
ReadFile
-----------------------------------------------------------------------
函数原型
BOOL ReadFile( HANDLE hFile, //文件的句柄
  LPVOID lpBuffer, //用于保存读入数据的一个缓冲区
  DWORD nNumberOfBytesToRead, //要读入的字节数
  LPDWORD lpNumberOfBytesRead, //指向实际读取字节数的指针
  LPOVERLAPPED lpOverlapped //如文件打开时指定了FILE_FLAG_OVERLAPPED,那么必须,用这个参数引用一个特殊的结构。该结构定义了一次异步读取操作。否则,应将这个参数设为NULL   
);
--------------------------------------------------------------------------
[DllImport("Kernel32.dll")]
public static extern bool ReadFile(IntPtr Hfile,ref 你的结构体名 lpBuffer,int nNumberOfBytesToRead,ref int lpNumberOfBytesRead,IntPtr zero);

回答(3):

顺便学习下