【问题标题】:Getting a value type from binary file c#从二进制文件c#中获取值类型
【发布时间】: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


【解决方案1】:

我如何知道我在文件中读取的数据类型是什么?

你不能。不是来自字节本身(与文件的扩展名等相反)。字节只是字节。它们代表什么取决于编写文件的人。

(您可以尝试看看它是否有意义,例如它必须是“A”还是 int - 如果不是“A” - 它是 int。但它可能也是 int 的第一个字节,恰好与 'A' 的 ASCII(?) 值相同。)

【讨论】:

  • 正确。或许值得一提的是,二进制文件通常会通过定义格式来给读者提示
  • 那么最好的方法是尝试将第二个值读取为'char'?因为我这样做了,它仍然会读取它。
  • @CodeXtack 对不起。我不明白你的评论,所以我无法回答。但无论如何,请参阅 Gus 在您上面的评论 - 关键是正确的方法是让文件的创建者将该信息传达给您。例如,这可以通过某个字节作为其后面的字节是 char 还是 long 的标志来完成。
猜你喜欢
  • 2013-12-03
  • 2021-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 2021-09-07
相关资源
最近更新 更多