TMemoryStream - MFC-Äquivalent?
-
lol, super schnelle Reaktion
-
Jo
Das schreiben hab ich eben erst jetzt gebraucht, das Äquivalent selbst schon früher
-
Bitte, ich brauch das noch heute
-
Hab wirklich keine Ahnung, aber vielleicht so?
CMemFile mf; mf.SetFilePath("C:\\save.dat"); CArchive ar( &mf, CArchive::store); // für speichern
-
Hmm ... Sieht net schlecht aus
Danke.
-
Na ja, es sollte schon funktionieren?
Tut es das? Wahrscheinlich nicht.
-
Habs noch nciht getestet, werd ich wohl erst in ein, zwei stunden können ...
-
Damit gehts nicht, aber CMemFile ist ja von CFile abgeleitet, also ganz normal mit Open. Folgenden Code hab ich jetzt, aber ich hab immer noch keine Ahnung, wie ich die Daten jetzt vom CMemFile in die Datei bekomm
CMemFile MF; MF.Open("C:\\MemFileTest.txt",CFile::modeCreate |CFile::modeWrite); MF.Write("Hallo",6); CArchive Ar(&MF, CArchive::store);
-
CMemFile ist für File-Operationen im RAM, damit kann man NICHT auf HDD speichern, weil diese Funktionen überschrieben sind, so dass ins RAM geschrieben wird!
Wenn Du sowieso in eine Datei speichern willst, kannst Du doch gleich CFile nehmen. Kommt halt drauf an, wie groß die Datei ist und wie oft man hin und her springen muss! Am günstigsten für Festplattenzugriffe ist halt immer, hintereinander weg zu schreiben
Wenn Du nun wirklich eine Kopie des RAM-Speichers erstellen willst, gibts 2 Möglichkeiten.
1. CFile-Objekt für Datei anlegen (immer notwendig)
2/1. temporären Buffer anlegen und mit Read/Write wie eh und je arbeiten (1. Möglichkeit)
2/2. mit der undokumentierten Funktion GetBufferPtr Zeiger auf Datenspeicher holen und direkt schreiben (mal in die Source zum Verständnis schauen)
-
Danke für deine Antwort. So ähnlihc hab ichs heute nacht irgendwann dann auch gemacht:
CFile File(...) CArchive Ar(&File,CArchive::store); int nLength = MF.GetLength(); BYTE *pBuf = MF.Detach(); Ar.Write(pBuf,nLength); File.Close(); Ar.Close(); MF.Attach(pBuf, nLength);
-
Au mann, was für eine schwere Geburt!!!
-
Und ?