2017-10-17 5 views
0

バイナリファイルを読み込んでいるときに何かを見つけようとしています。バイナリファイルから値の型を取得するC#

私のファイルには、最初に長い型の値( '8')があり、ファイルに応じて、次の値は文字(たとえば 'E')または別の長さ(たとえば'5')。 私の質問は、ファイルでどのような種類のデータを読んでいるのか、どのように知ることができますか?

私のコードは次のようになります。私は、ファイルの次の位置に移動していないのためにPeekCharを使用してい

 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; 
      } 
     } 

+0

数値または文字であることがわかっている場合は、 'TryParse'を試してみることができます。それが失敗すると数値として保存され、 'char'として保存されます。 –

+0

C#7を使うことができれば、パターンを使って 'Switch'文を試すことができます。 [MSDN](https://blogs.msdn.microsoft.com/dotnet/2016/08/24/whats-new-in-csharp-7-0/) –

+0

また、テキストはありませんが、エンコードされていますテキスト。テキストのバイトを取得するときには、書き込まれたエンコーディングも取得する必要があります。また、マルチバイト整数表現は1つではなく、リトルエンディアンとビッグエンディアンの2つです。これらはすべてファイル形式で伝達されなければなりません。 –

答えて

2

私は自分のファイルでどのようなデータの価値を知っていますか?

できません。バイト自体からではなく(ファイルの拡張子などとは対照的に)。バイトは単なるバイトです。彼らの表現は、誰がファイルを書いたかによって決まります。

です。「A」またはintでなければならないかどうかを確認してください。「A」でない場合はintですが、最初の'A'のASCII(?)値とちょうど同じintのバイトが返されます)。

+1

Spot on。たぶん、バイナリファイルは、読者にヒントを与えるためのフォーマットを定義して明快さを欠いていることに言及する価値があります – Gus

+0

次に、最良の方法は2番目の値を 'char'として読み込もうとしますか?私はそれをしたので、それはまだそれを読んでいます。 – CodeXtack

+0

@CodeXtackごめんなさい。私はあなたのコメントを理解できないので、私はそれに答えることはできません。しかし、とにかく、あなたの上のGusのコメントを見てください - ポイントは、ファイルの作成者がその情報をあなたに伝えることが正しい方法であるということです。これは、例えば、バイトの後にあるバイトがcharかlongかのフラグであるいくつかのバイトによって行うことができます。 – ispiro

関連する問題