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:
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 );