【发布时间】:2017-10-17 18:39:03
【问题描述】:
我试图在读取二进制文件时找出一些东西。
在我的文件中,开头有一个 long 类型值('8'),然后,根据文件,下一个值将是一个字母(例如 'E')或另一个 long(例如 ' 5')。 我的问题是:我如何知道我在文件中读取的数据值是什么类型的?
我的代码如下所示:
FileStream streamR = new FileStream(archivo, FileMode.Open, FileAccess.Read);
BinaryReader reader = new BinaryReader(streamR);
Boolean checkNext = false;
Boolean bandHeadr = false;
Boolean bandRank = false;
long archivoPos;
while (reader.BaseStream.Position != reader.BaseStream.Length)
{
if (bandHeadr == false)
{
// HERE IT READS THE FIRST VALUE, ALWAYS A LONG TYPE VALUE
long header = reader.ReadInt64();
data.Add(header);
bandCabecera = true;
}
if (checkNext == false)
{
try
{
// HERE I'M TRYING TO CHECK THE NEXT VALUE, BUT RETURNS AN ASCII CODE IF IT IS A LETTER
int ix = reader.PeekChar();
}
catch
{
// THIS WILL IF THE NEXT VALUE IS ANOTHER LONG
if (bandRank == false)
{
try
{
long rang = reader.ReadInt64();
rangO = rang;
button9.Enabled = false;
}
catch
{
// EMPTY CATCH
}
bandRank = true;
}
}
checkNext = true;
}
}
我使用 PeekChar 是为了不移动到文件的下一个位置。
【问题讨论】:
-
如果您知道它将是数字或字母,那么您可以尝试
TryParse,如果成功则将其保存为数字,如果失败则将其保存为char。 -
如果您可以使用 C#7,那么您可以尝试使用带有模式的
Switch语句。 MSDN -
另外,请记住,没有文本,只有编码文本。当您获取文本字节时,您还必须获取写入它们的编码。而且,没有一种多字节整数表示,而是两种:little-endian 和 big-endian。所有这些都必须以文件格式传达。
标签: c# binaryfiles binaryreader