Je voudrais ajouter un tableau d'octets à un fichier existant (C:\test.exe)
. Supposons le tableau d'octets suivant:
byte[] appendMe = new byte[ 1000 ] ;
File.AppendAllBytes(@"C:\test.exe", appendMe); // Something like this - Yes, I know this method does not really exist.
Je le ferais en utilisant File.WriteAllBytes, mais je vais utiliser un tableau d'octets ENORMOUS et une exception System.MemoryOverload est constamment levée. Donc, je devrai très probablement diviser le grand tableau en plusieurs parties et ajouter chaque tableau d'octets à la fin du fichier.
Je vous remercie,
Evan
Une solution serait de créer une FileStream
avec le mode FileMode.Append
creation.
Ouvre le fichier s'il existe et cherche à la fin du fichier, ou crée un nouveau fichier.
Cela ressemblerait à quelque chose comme:
public static void AppendAllBytes(string path, byte[] bytes)
{
//argument-checking here.
using (var stream = new FileStream(path, FileMode.Append))
{
stream.Write(bytes, 0, bytes.Length);
}
}
FileStream
.Seek()
jusqu'à la fin.Write()
les octets.Close()
le flux.Vous pouvez également utiliser la FileSystem.WriteAllBytes Method (String, Byte[], Boolean)
intégrée.
public static void WriteAllBytes(
string file,
byte[] data,
bool append
)
Définissez append to True à ajouter au contenu du fichier; False pour écraser le contenu du fichier. La valeur par défaut est False.
Je ne suis pas tout à fait sûr de la question, mais C # a une méthode BinaryWriter
qui prend un tableau d'octets.
bool writeFinished = false;
string fileName = "C:\\test.exe";
FileStream fs = new FileString(fileName);
BinaryWriter bw = new BinaryWriter(fs);
int pos = fs.Length;
while(!writeFinished)
{
byte[] data = GetData();
bw.Write(data, pos, data.Length);
pos += data.Length;
}
Où writeFinished
est vrai lorsque toutes les données ont été ajoutées et GetData()
renvoie un tableau de données à ajouter.
vous pouvez simplement créer une fonction pour le faire
public static void AppendToFile(string fileToWrite, byte[] DT)
{
using (FileStream FS = new FileStream(fileToWrite, File.Exists(fileToWrite) ? FileMode.Append : FileMode.OpenOrCreate, FileAccess.Write)) {
FS.Write(DT, 0, DT.Length);
FS.Close();
}
}