[Gelöst] FileMapping schreibgeschützt
-
Hallo,
ich stehe vor einem blöden Problem. Ich öffne via CreateFile eine über 20GB große Datei, erstelle mit CreateFileMapping ein Mapping und mit MapViewOfFile eine View. So weit so gut. Nun habe ich aber folgende Frage:
Ich möchte in diese Datei schreiben, aber NICHT speichern. Geht das?!
Mein grober Code:const HANDLE file_handle = CreateFile(file_path, GENERIC_READ, 0, nullptr, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, nullptr); HANDLE file_memory_handle = CreateFileMapping(file_handle, nullptr, PAGE_READONLY, 0, 0, nullptr); LPVOID file_view = MapViewOfFile(file_memory_handle, FILE_MAP_READ | FILE_MAP_COPY, 0, 0, 0);
Hatte mal ein paar andere Parameterkombinationen ausprobiert aber das führe auch zu keinem Erfolg.
-
Was soll denn "Ich möchte in diese Datei schreiben, aber NICHT speichern" bedeuten? Das ergibt keinen Sinn...
Der Sinn des FileMappings ist doch ein direkter Zugriff auf die Datei (und somit auf dessen Inhalt).
-
Ganz einfach, ich möchte temporär schreiben, aber nicht speichern. Ganz easy!
Sinn würde es ergeben, wenn ich mehr erklären würde, aber das täte nichts zur Sache;-)
-
tmpfile?
-
Naja, ich ändere schon den Inhalt der eigetlichen Datei ab, aber das Original muss bestehen blieben ohne, dass ich zig GB kopieren muss.
-
meinst du nicht, dass du dein programmdesign irgendwie überdenken solltest? dateizugriffe sind mehr oder weniger anweisungen an den festplattencontroller, dass er mal an adresse x lesen oder schreiben soll. da kannst du nicht mal eben was ändern, ohne zu speichern.
-
Quatsch.
Ich find die Frage auch interessant, komm aber grad auch nicht drauf, wie man das (einfach) machen könnte.
-
Mit Unix mmap geht das. FILE_MAP_COPY als Flag für MapViewOfFile scheint das auch zu machen.
Hast du denn ein Problem mit deinem Code?
-
Ha, es scheint zu funktionieren:-)
CreateFile....GENERIC_READ...
CreateFileMapping....PAGE_WRITECOPY...
MapViewOfFile....FILE_MAP_COPY...Besten Dank!!