Pytanie Jak dołączyć dane do pliku binarnego?


Mam plik binarny, do którego chcę dodać fragment danych na końcu pliku, w jaki sposób mogę to osiągnąć za pomocą C # i .net? również czy są jakieś uwagi, które należy wziąć, pisząc na końcu pliku binarnego? bardzo dziękuję za Twoją pomoc.


21
2018-03-07 23:19


pochodzenie




Odpowiedzi:


private static void AppendData(string filename, int intData, string stringData, byte[] lotsOfData)
{
    using (var fileStream = new FileStream(filename, FileMode.Append, FileAccess.Write, FileShare.None))
    using (var bw = new BinaryWriter(fileStream))
    {
        bw.Write(intData);
        bw.Write(stringData);
        bw.Write(lotsOfData);
    }
}

23
2018-03-07 23:33



+1 Podoba mi się ta odpowiedź, ponieważ pokazuje, jak dodatkowo przenieść natywne typy danych do strumienia jako reprezentacje binarne. - John K
@jdk - co oczywiście sprawia, że los domniemań co do podstawowych danych jest; za byte[] oczywiście, to zawsze ma sens ... ale kodowanie dla innych może być mile na zewnątrz. - Marc Gravell♦
+1 dla pisarza binarnego, jeśli piszesz dane binarne, najlepiej jest używać pisarza - Grant Peters
Zastanawiam się, jaki byłby przypadek użycia dołączania danych binarnych na końcu pliku. Może to robić kolejne zrzuty pamięci? - Divij Sehgal
Możesz umieścić swój komentarz na oryginalnym pytaniu, ponieważ plakat miał na myśli przypadek użycia. - Jesse C. Slicer


Powinieneś być w stanie to zrobić poprzez Stream:

using (FileStream data = new FileStream(path, FileMode.Append))
{
    data.Write(...);
}

Co do rozważań - najważniejszy byłby: czy dołączono wsparcie dla formatu danych? Wiele nie, chyba że są to twoje własne surowe dane, tekst itp. Dobrze sformatowany dokument XML nie obsługuje na przykład append (bez uwzględnienia końcowego elementu końcowego). Nie będzie czegoś takiego jak dokument Word. Niektóre jednak. Więc; czy twoje dane są w porządku z tym ...


5
2018-03-07 23:36





Za pomocą StreamWriter i odniesienia DotNetPerls, pamiętaj, aby dodać True boolean do StreamWriter konstruktor, jeśli w przeciwnym razie pozostanie pusty, zostanie nadpisany jak zwykle:

using System.IO;

class Program
{
    static void Main()
    {
    // 1: Write single line to new file
    using (StreamWriter writer = new StreamWriter("C:\\log.txt", true))
    {
        writer.WriteLine("Important data line 1");
    }
    // 2: Append line to the file
    using (StreamWriter writer = new StreamWriter("C:\\log.txt", true))
    {
        writer.WriteLine("Line 2");
    }
    }
}

Output
    (File "log.txt" contains these lines.)

Important data line 1
Line 2

To rozwiązanie, którego tak naprawdę szukałem, gdy dotarłem tutaj z Google, chociaż nie był to plik binarny, mam nadzieję, że pomoże komuś innemu.


0
2017-11-25 05:32