バイナリファイルを読み込んでいるときに何かを見つけようとしています。バイナリファイルから値の型を取得する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;
}
}
。
数値または文字であることがわかっている場合は、 'TryParse'を試してみることができます。それが失敗すると数値として保存され、 'char'として保存されます。 –
C#7を使うことができれば、パターンを使って 'Switch'文を試すことができます。 [MSDN](https://blogs.msdn.microsoft.com/dotnet/2016/08/24/whats-new-in-csharp-7-0/) –
また、テキストはありませんが、エンコードされていますテキスト。テキストのバイトを取得するときには、書き込まれたエンコーディングも取得する必要があります。また、マルチバイト整数表現は1つではなく、リトルエンディアンとビッグエンディアンの2つです。これらはすべてファイル形式で伝達されなければなりません。 –