Kopie von Datei erstellen [<- erledigt]; neues Problem beim zweimal ausführen von FKT
-
Hi Leute,
ich hab ne Frage zu Datei öffnen und speichern. Aber nicht dass ihr gleich wieder
so macht, es geht nicht um die Standard frage wie öffne und speichere ich, sondern die Frage ist:
Ich habe eine Datei und will von dieser Datei eine Kopie anlegen. Es geht nämlich um folgendes. Ich schreibe ein Programm zur Dokumentenverwaltung, wenn jetzt ein Dokument geändert wird muss die alte Version des Dokumentes bestehen bleiben. (Ist halt Pflicht) drum darf man wenn man speichern drückt nicht das aktuelle Dokument überschrieben werden sondern aus dokument_c.doc wird dann dokument_d.doc. Ich will das File das besteht allerings niergendwo sichtbar öffnen.
Für euren Rat dank ich euch jetzt schon
-
MSDN:
BOOL CopyFile( LPCTSTR lpExistingFileName, // name of an existing file LPCTSTR lpNewFileName, // name of new file BOOL bFailIfExists // operation if file exists );
oder
BOOL CopyFileEx( LPCTSTR lpExistingFileName, // name of existing file LPCTSTR lpNewFileName, // name of new file LPPROGRESS_ROUTINE lpProgressRoutine, // callback function LPVOID lpData, // callback parameter LPBOOL pbCancel, // cancel status DWORD dwCopyFlags // copy options );
-
WOW Klasse das ist ja total einfach, wie gut!!
Vielen lieben Dank!
-
ööööööh doch noch frage zwar nicht direkt zu dem Thema, aber ein Problem das ich dabi habe. Hier mal mein Source:
void CEinstellungenView::OnBtnNew() { UpdateData(true); // Datenbank durchsuchen, ob Eintrag bereits vorhanden if(m_pSet->PCDsuchen(m_sPCD)) {// Index anzeigen in Messagebox LPCTSTR lpExistingFileName = getPath("1234-05-R",1);//hier steht mein richtiger Pfad drin LPCTSTR lpNewFileName = getPath("1234-05-R",9999);//sobald die Zeile kommt ändert sich auch lpExistingFileName BOOL bFailIfExists = false; if(AfxMessageBox("Das Eingegebene Dokument ist bereits vorhanden, wollen sie den Index erhöhen??",MB_YESNO) == IDYES) { CopyFile( lpExistingFileName, // name of an existing file lpNewFileName, // name of new file bFailIfExists // operation if file exists ); } }
Also so wie oben im Source beschrieben ändert sich mein lpExistingFileName sich in der nächsten Zeiule mit ändert, ich weiß aber nciht warum!
hier mal mein getPath();CString CEinstellungenView::getPath(CString PCDNr, int Index) { loadSettings(1); //mit 1 als Übergabe wird UpdateData ausgeschlossen; für aufrufe aus anderen Klassen CDokumentenVerwaltungView PCD; if (PCDNr.IsEmpty()) { PCDNr = PCD.getSearchResultPCD(); Index =PCD.getSearchResultAnweisungsindex(); } m_Path.Format("%s\\%s\\%s\\%s%d.%s", m_strValue1, PCDNr, m_strValue2, m_strValue3, Index, m_strValue4);//sonst steht nur Schrott drin return m_Path; }
Kann mir jemand sagen was da schief läuft? lpExisting soll nachher schon als index 1 haben und nicht 9999
-
Wenn ich das richtig sehe, weist Du hier CStrings irgendwelchen uninitialisierten Pointern zu! Versuchs mal mit:
void CEinstellungenView::OnBtnNew() { UpdateData(true); // Datenbank durchsuchen, ob Eintrag bereits vorhanden if(m_pSet->PCDsuchen(m_sPCD)) {// Index anzeigen in Messagebox CString csExistingFileName = getPath("1234-05-R",1); CString csNewFileName = getPath("1234-05-R",9999); BOOL bFailIfExists = false; if(AfxMessageBox("Das Eingegebene Dokument ist bereits vorhanden, wollen sie den Index erhöhen??",MB_YESNO) == IDYES) { CopyFile( (LPCSTR) csExistingFileName , // name of an existing file (LPCSTR) csNewFileName, // name of new file bFailIfExists // operation if file exists ); } }
-
ahhh LPCSTR ist ein Pointer auf einen String und drum ändert der sich natürlich mit logo. Man ich blinde!
Vielen Dank ich denke jetzt sollte es klappen.