从二进制文件获取值类型c#

时间:2017-10-17 18:39:04

标签: c# binaryfiles binaryreader

我在读取二进制文件时试图找出一些东西。

在我的文件中,开头有一个很长的类型值(' 8'),然后,根据文件,下一个值将是一个字母(例如' ; E')或其他长篇(例如' 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是为了不移动到文件的下一个位置。

1 个答案:

答案 0 :(得分:2)

  

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

你不能。不是来自字节本身(而不是文件的扩展等)。字节只是字节。它们代表什么取决于谁写了文件。

(你可以尝试查看它是否有意义,例如它是否必须是' A'或者int - 如果它不是&# 39; A' - 它是一个int。但它也可能是一个int的第一个字节恰好与一个' A'的ASCII(?)值相同。 。)