我想阅读其中包含char
,String
和Integer
的二进制文件。我该怎么读?我试图读取我的文件我的下面的函数,它工作正常,但如何在不知道下一个值的数据类型的情况下读取文件?
static void read() // Read Function
{
FileStream a = new FileStream("bin.txt", FileMode.Open);
BinaryReader b = new BinaryReader(a);
int pos = 0;
Console.WriteLine(b.ReadChar());
Console.WriteLine(b.ReadChar());
Console.WriteLine(b.ReadString());
Console.WriteLine(b.ReadInt32());
}
static void write() // Write Function This What My File consist Of Data.
{
BinaryWriter al = new BinaryWriter(File.Create("bin.txt"));
char a = 'l';
al.Write(a);
a = 'p';
al.Write(a);
string l = "loremm";
al.Write(l);
al.Write(1233);
al.Close();
}
答案 0 :(得分:2)
成功的二进制文件类型具有数据顺序的规则。
这些可以是基于结构的。例如。存档格式可以在文件数据之前
struct {
char name[256];
size_t uncompressedSize;
size_t compressedsize;
short compressionmethod;
};
或C#
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Explicit, Size = 276, Pack = 1)]
public struct NewStuff
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
[FieldOffset(0)]
public string Name;
[MarshalAs(UnmanagedType.U8)]
[FieldOffset(256)]
public UInt64 uncompressedSize;
[MarshalAs(UnmanagedType.U8)]
[FieldOffset(264)]
public UInt64 compressedSize;
[MarshalAs(UnmanagedType.U2)]
[FieldOffset(272)]
public UInt16 compressionMethod;
}
这允许读取数据块,然后知道后续数据的类型。
或者,您可以标记'数据,例如。
Inttag; intvalue; stringtag;字符串值
这可以包括'命名'物品例如'文件数据'然后命名下一条记录。