c # – Lire des octets spécifiques d’un fichier

Est-il possible de lire des octets spécifiques à partir d’un fichier?

Par exemple, j’ai le code suivant pour lire tous les octets du fichier

byte[] test = File.ReadAllBytes(file); 

Je veux lire les octets de l’offset 50 à l’offset 60 et les mettre dans un tableau.

Version LINQ:

 byte[] test = File.ReadAllBytes(file).Skip(50).Take(10).ToArray(); 

Créez un BinaryReader, lisez 10 octets à partir de l’octet 50:

 byte[] test = new byte[10]; using (BinaryReader reader = new BinaryReader(new FileStream(file, FileMode.Open))) { reader.BaseStream.Seek(50, SeekOrigin.Begin); reader.Read(test, 0, 10); } 

Cela devrait le faire

 var data = new byte[10]; int actualRead; using (FileStream fs = new FileStream("c:\\MyFile.bin", FileMode.Open)) { fs.Position = 50; actualRead = 0; do { actualRead += fs.Read(data, actualRead, 10-actualRead); } while (actualRead != 10 && fs.Position < fs.Length); } 

À la fin, les data contiendraient 10 octets entre les décalages de 50 et 60 du fichier, et actualRead contiendrait un nombre de 0 à 10, indiquant le nombre d'octets réellement lus (cela est intéressant lorsque le fichier contient au moins 50, mais moins de 60). octets). Si le fichier EndOfStreamException moins de 50 octets, vous verrez l’ EndOfStreamException .

Tu dois:

  • rechercher les données que vous voulez
  • appelez Read à plusieurs resockets, en vérifiant la valeur de retour, jusqu’à ce que toutes les données nécessaires soient

Par exemple:

 public static byte[] ReadBytes(ssortingng path, int offset, int count) { using(var file = File.OpenRead(path)) { file.Position = offset; offset = 0; byte[] buffer = new byte[count]; int read; while(count > 0 && (read = file.Read(buffer, offset, count)) > 0 ) { offset += read; count -= read; } if(count < 0) throw new EndOfStreamException(); return buffer; } } 
 using System.IO; public static byte[] ReadFile(ssortingng filePath) { byte[] buffer; FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read); try { buffer = new byte[length]; // create buffer fileStream.Read(buffer, 50, 10); } finally { fileStream.Close(); } return buffer; } 

Vous pouvez utiliser filestream pour appeler ensuite read

 ssortingng pathSource = @"c:\tests\source.txt"; using (FileStream fsSource = new FileStream(pathSource, FileMode.Open, FileAccess.Read)) { // Read the source file into a byte array. byte[] bytes = new byte[fsSource.Length]; int numBytesToRead = 10; int numBytesRead = 50; // Read may return anything from 0 to numBytesToRead. int n = fsSource.Read(bytes, numBytesRead, numBytesToRead); } 

Vérifiez cet exemple MSDN

 byte[] a = new byte[60]; byte[] b = new byte[10]; Array.Copy( a ,50, b , 0 , 10 );