C # - прочитать двойное значение - PullRequest
2 голосов
/ 21 июня 2011
  1. Предположим, что в файл в двоичном формате записано только одно значение типа double.Как я могу прочитать это значение, используя C # или Java?

  2. Если мне нужно найти двойное значение из огромного двоичного файла, какие методы мне следует использовать, чтобы найти это?1008 *

Ответы [ 6 ]

10 голосов
/ 21 июня 2011

Double - 8 байтов. Для чтения одного двойного из двоичного файла вы можете использовать BitConverter class:

var fileContent = File.ReadAllBytes("C:\\1.bin");
double value = BitConverter.ToDouble(fileContent, 0);

Если вам нужно прочитать двойное с середины файла, замените 0 байтовым смещением.

Если вы не знаете смещение, вы не можете сказать, что определенное значение в байтовом массиве является double, integer или string.

Другой подход:

using (var fileStream = File.OpenRead("C:\\1.bin"))
using (var binaryReader = new BinaryReader(fileStream))
{
    // fileStream.Seek(0, SeekOrigin.Begin); // uncomment this line and set offset if the double is in the middle of the file
    var value = binaryReader.ReadDouble();
}

Второй подход лучше для больших файлов, так как он не загружает весь контент файла в память.

2 голосов
/ 21 июня 2011

Вы можете использовать класс BinaryReader.

double value;
using( Stream stream = File.OpenRead(fileName) )
using( BinaryReader reader = new BinaryReader(stream) )
{
    value = reader.ReadDouble();
}

Для второй точки, если вы знаете смещение, просто используйте метод Stream.Seek.

1 голос
/ 21 июня 2011

Кажется, нам нужно знать, как двойное значение было закодировано в файле, прежде чем мы сможем его найти.

0 голосов
/ 21 июня 2011
using (FileStream filestream = new FileStream(filename, FileMode.Open))
using (BinaryReader reader = new BinaryReader(filestream))
{
    float x = reader.ReadSingle();
}
0 голосов
/ 21 июня 2011

Вот как читать (и писать для целей тестирования) двойное значение:

    // Write Double
    FileStream FS = new FileStream(@"C:\Test.bin", FileMode.Create);
    BinaryWriter BW = new BinaryWriter(FS);

    double Data = 123.456;

    BW.Write(Data);
    BW.Close();

    // Read Double
    FS = new FileStream(@"C:\Test.bin", FileMode.Open);
    BinaryReader BR = new BinaryReader(FS);

    Data = BR.ReadDouble();
    BR.Close();

Извлечение его из большого файла зависит от того, как данные размещены в файле.

0 голосов
/ 21 июня 2011

1)

        double theDouble;
        using (Stream sr = new FileStream(@"C:\delme.dat", FileMode.Open, FileAccess.Read))
        {
            byte[] buffer = new byte[8];
            sr.Read(buffer, 0, 8);

            theDouble = BitConverter.ToDouble(buffer, 0);
        }

2) Вы не можете.

...