Datei umbenennen



  • Hallo,

    ich möchte in einem Verzeichnis ein paar Dateien umbenennen.
    Ich habe mir bereits den Pfad zu Datei geholt und einem neuen
    CString den gewünschten neuen Namen zugewiesen.

    Jetzt steh ich aber wie der Ochs vor dem Berg wie ich die Datei
    umbenenne. Soll ich die Datei komplett einlesen und dann unter
    dem neuen Namen wieder hinschreiben? Klappt das mit allen Dateien,
    oder riskiere ich dabei evtl. die Datei beim Rückschreiben zu
    "zerstückeln"?

    Eine Idee wäre evtl. ja noch mittels WinAPI:

    CString a="c:\\test.txt";
    	CString b="c:\\abcdefg.txt";
    
    	::rename(a,b);
    

    Aber kann ich das mit jeder Datei(doc,xls,exe...) so machen?



  • Ich weiß nicht genau ob das reicht, aber es gibt ne Funktion ".Rename()".

    CFile test;
    test.Rename(<alter name>,<neuer name>);
    

    Aber ich habs nicht probiert.
    Probiers mal aus und probier mal deine ideen einfach mal aus...try & error methode 😉



  • Jupp das geht. Scheint das Gegenstück zum WinAPI-Weg zu sein 🙂

    Mit meiner Test.exe hat es super geklappt. Ich hoffe mal da wird
    nicht irgendwo eine Datei bei zerstückelt.

    Hier habe ich noch einen Altenativweg gefunden.
    Ich vermute aber mal es ist egal welchen Weg man wählt:

    void COperationenDlg::OnUmbenennen() 
      {
        CString strDateiAlt = "C:\\test.txt";
        CString strDateiNeu = "C:\\datei.txt";
        CFileFind DateiSuchen;
    
        if(DateiSuchen.FindFile(strDateiAlt)) 
        { 
          // Datei vorhanden, also umbenennen
          strDateiAlt += '\0';
          strDateiNeu += '\0';
    
          SHFILEOPSTRUCT shFile;
          ZeroMemory(&shFile, sizeof(shFile));
          shFile.wFunc = FO_RENAME;
          shFile.pFrom = strDateiAlt;
          shFile.pTo = strDateiNeu;
          SHFileOperation(&shFile);
          MessageBox("Die Datei " + strDateiAlt + " wurde in " +strDateiNeu + " umbenannt");
        } 
        else
        {
          // Datei nicht vorhanden
          MessageBox("Die Datei " + strDateiAlt + " ist nicht vorhanden", "Datei nicht vorhanden", MB_ICONINFORMATION);
        }
      }
    


  • Uruk-h4j schrieb:

    CFile test;
    test.Rename(<alter name>,<neuer name>);
    

    CFile::Rename ist static, du brauchst also kein CFile-Objekt zu erstellen.



  • @ MFK:

    Jo Danke. Gut zu wissen. Dan spar ich mir die Zeile beim nächsten mal 😉


Anmelden zum Antworten