erneutes Datei einlesen schlägt fehl

cyros

Grünschnabel
Hallo,

ich habe ein SDI-Projekt, in dem ich eine Datei einlesen und analysiere.

Wenn ich nun dieselbe Datei wieder einlesen möchte, weil von extern etwas geändert wurde, schlägt dieses fehl. Besser gesagt, beim ersten einlesen der Datei wird die Methode OnOpenDocument in CGrafikDoc aufgerufen. Beim erneuten öffnen der Datei passiert dieses nicht.

Woran kann das liegen oder wie kann ein erneutes einlesen der Datei erzwungen werden?

Dank schonmal im voraus!
 
Code:
BOOL CGrafikDoc::OnOpenDocument(LPCTSTR lpszPathName) 
{

	char filename [256];
	strcpy (filename, lpszPathName);
	grafik_fileopen (filename);

	if (!CDocument::OnOpenDocument(lpszPathName))
		return FALSE;
	
	// TODO: Add your specialized creation code here

	return TRUE;
}

Hier gehts beim ersten Datei öffnen durch und wenn dieselbe Datei nochmal geöffnet wird, wird der Code hier nicht nocheinmal durchlaufen. Außer ich öffne eine andere Datei.

Das erneute Aufrufen der Methode
Code:
grafik_fileopen (filename);
ist aber wichtig, wegen eventuellen Veränderungen an der Datei von extern.
 
Hmmm. Den OnOpen durchläuft er doch nur einmalig beim Öffnen des Dokuments, oder täusche ich mich da? Wenn du also das Dokument öffnest, dann wird das OnOpen nicht erneut durchlaufen, bevor das Dokument nicht wieder geschlossen wurde.

Wofür brauchst du den grafik_fileopen denn genau? Ging der nicht auch in ein modifiziertes OnChange? Oder verstehe ich da etwas völlig falsch?
 
Das Framework öffnet die Datei nicht, wenn sie schon offen ist. Intern wird da der Dateiname verglichen. Du mußt die Datei erst schließen und dann wieder öffnen.
 
Zuletzt bearbeitet:
jokey2 hat gesagt.:
DAs Framework öffnet die Datei nicht, wenn sie schon offen ist. Intern wird da der Dateiname verglichen. Du mußt die Datei erst schließen und dann wieder öffnen.
Ich habe da einen Pointer "pOpenDocument" an der Hand, der vermutlich auf das geöffnete MFC-DocumentTemplate verweist.
Der Filestream ist "physikalisch" geschlossen, MFC hält aber an diesem Zeiger fest.
Leider habe ich noch keine Methode gefunden, die mir helfen würde, mit diesem Pointer das File auch für MFC zu schließen.
Habt Ihr da Anhaltspunkte für mich?
 
Isch hab da jetzt ein Workaround: dirty, aber 's geht...

Im DocumentManager::OpenDocumentFile lege ich zuerst mit DocumentTemplate::OpenDocumentFile(NULL) ein "neues Dokument" an.
Danach erst öffne ich mit DocumentTemplate::OpenDocumentFile(myFileName) das eigentliche Dokument.

Verbesserungsvorschläge willkommen...
 
Zurück