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.


Anmelden zum Antworten