6 Stimmen

Lesen einer Binärdatei in C# ab einer bestimmten Position

Ist es möglich, eine große Binärdatei von einer bestimmten Position aus zu lesen?

Ich möchte die Datei nicht von Anfang an lesen, denn ich kann die Startposition und die Länge des benötigten Streams berechnen.

0 Stimmen

Alles, was Sie tun müssen, ist die Änderung der Position Eigenschaft, oder verwenden Sie die Seek Methode. Sind Sie besorgt, dass die gesamte Datei in den Speicher geladen wird?

0 Stimmen

Ja, ich möchte nicht die gesamte Datei in den Speicher laden. Ich verwende den BinaryReader und konnte die Methode Seek nicht finden. --> BinaryReader.BaseStream.Seek(), das ist die Lösung. ;-)

0 Stimmen

Sie müssen nicht befürchten, dass eine große Datei in den Speicher geladen wird. Ein Stream lädt immer nur einen Teil der Datei. Sonst könnten wir niemals große Dateien öffnen.

15voto

Petar Ivanov Punkte 89412
using (FileStream sr = File.OpenRead("someFile.dat"))
{
    sr.Seek(100, SeekOrigin.Begin);
    int read = sr.ReadByte();
    //...
}

9voto

Yehuda G. Punkte 131

Según @shenhengbin answord.

Utilice BinaryReader.BaseStream.Seek .

using (BinaryReader b = new BinaryReader(File.Open("perls.bin", FileMode.Open)))                                                     
{
    int pos = 50000;
    int required = 2000;

    // Seek to our required position.
    b.BaseStream.Seek(pos, SeekOrigin.Begin);

    // Read the next 2000 bytes.
    byte[] by = b.ReadBytes(required);
}

1voto

Boas Enkler Punkte 12024

Nun, wenn Sie sich mit Streams auskennen, warum nicht (File)Stream.Seek(...) verwenden?

0voto

Rasel Punkte 16361

Natürlich ist das möglich, siehe dies aquí Sehen Sie sich den Offset an. Sie können den Offset ablesen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X