web-dev-qa-db-fra.com

C # Ajoute un tableau d'octets au fichier existant

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

32
user725913

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);
    }
}
53
Ani
  1. Créez une nouvelle FileStream.
  2. Seek() jusqu'à la fin.
  3. Write() les octets.
  4. Close() le flux.
6
Mehrdad

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.

5
Hamed

Je ne suis pas tout à fait sûr de la question, mais C # a une méthode BinaryWriter qui prend un tableau d'octets.

BinaryWriter (Byte [])

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;
}

writeFinished est vrai lorsque toutes les données ont été ajoutées et GetData() renvoie un tableau de données à ajouter.

3
user807566

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();
    }
}
0
Jack Gajanan