Domyślna wartość wypełniająca plik przy zapisie

0

Cześć!

Jak ustawić, by przy "seeku" były wpisywane wartość 0xFF zamiast 0x00?

// przyklad w QT
#include <QFile>
#include <QDataStream>

int main(){
    QFile file("out.bin");
    file.open(QFile::WriteOnly);

    QDataStream stream(&file);

    file.seek(18);
    stream << quint8(1);

    file.seek(2);
    stream << quint8(2);

    file.close();

    return 0;
}
$ hexdump -C out.bin 
00000000  00 00 02 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000010  00 00 01                                          |...|

W dużym skrócie:
-program ma stworzyć plik(~3GB)
-są wytyczne jak mają wyglądać dane fragmenty pliku (lista z danymi i adresami)
-miejsca gdzie nie były wpisywane dane, muszą mieć określoną wartość (np. 0xFF) - czyli "pad"

Problem mam właśnie z domyślną wartością "padów", jak to zmienić?

Tymczasowe rozwiązanie to, przeanalizowanie jaka będzie wielkość pliku, stworzenie tablicy wypełnionej wartościami "pad" i w pętli wypełnianie pliku.
Problemy:

  • optymalna wielkość tablicy, mała - wolno będzie dziubać, duża - marnowanie miejsca w pamięci RAM
  • podwójne wpisywanie danych do pliku, najpierw wypełnienie wartościami, następnie wpisywanie docelowych fragmentów
  • dodatkowa analiza aby określić wielkość pliku

Wolałbym mieć możliwość:

// ...
file.fillByte(0);
// ..

I po problemie, seek'ując plik, sam się wypełnia tymi wartościami.

Z góry dziękuję za pomoc.

0

Chyba nie ma na to żadnej zmiennej, po prostu to jest wolne miejsce.

Ale możesz przecież ręcznie zapisać przesunięcie seeknext(4);
memcpy(tab, 0xff, 4)
plik<<tab
seek now equal 4

1 użytkowników online, w tym zalogowanych: 0, gości: 1