C# - lecture des octets spécifiques d'un fichier
Est-il possible de lire les 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 réduire de 50 pour compenser 60 et les mettre dans un tableau.
29
demandé sur
animuson
2011-12-30 15:16:43
7 réponses
version LINQ:
byte[] test = File.ReadAllBytes(file).Skip(50).Take(10).ToArray();
13
répondu
user703016
2011-12-30 11:51:30
Créer un BinaryReader, lire 10 octets commençant à 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);
}
39
répondu
Robert Rouhani
2013-09-06 12:58:09
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, data
contiendrait 10 octets entre l'offset du fichier de 50 et 60, et actualRead
contiendrait un nombre de 0 à 10, indiquant combien d'octets ont été effectivement lus (ceci est intéressant lorsque le fichier a au moins 50 mais moins de 60 octets). Si le fichier est inférieur à 50 octets, vous verrez EndOfStreamException
.
28
répondu
dasblinkenlight
2016-10-04 13:20:42
Vous avez besoin de:
- rechercher les données que vous voulez
- appel de Lire à plusieurs reprises, la vérification de la valeur de retour, jusqu'à ce que vous disposez de toutes les données dont vous avez besoin
Par exemple:
public static byte[] ReadBytes(string 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;
}
}
2
répondu
Marc Gravell
2014-01-29 08:22:08
using System.IO;
public static byte[] ReadFile(string 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;
}
1
répondu
DonCallisto
2011-12-30 11:22:01
Vous pouvez utiliser filestream et ensuite appeler read
string 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);
}
1
répondu
oqx
2011-12-30 11:54:56
byte[] a = new byte[60];
byte[] b = new byte[10];
Array.Copy( a ,50, b , 0 , 10 );
-3
répondu
Mesh
2011-12-30 11:24:46