Problem mit "rename"-Funktion und Dateipfad zerlegen



  • Hi.

    Wie kann ich aus einem Dateipfad (z.B.: "C:\\Test\\Bla.txt") nur das Verzeichnis (z.B.: "C:\\Test") und die Endung der Datei (z.B.: "txt" oder "html") herauskopieren? ... Wenn es geht, bitte mit Quellcode-Beispiel. PS: Ich verwende die C++-Builder-AnsiStrings (ähnlich wie std::string).

    Außerdem habe ich ein Problem mit der "rename"-Funktion. Ich übergebe ihr z.B. die Parameter "C:\\Test\\Bla.txt" und "C:\\Test\\Datei1.txt", aber die Datei wird nicht umbenannt...

    Ausschnitt meines Quellcodes:

    const int anzahlDateien = 2;
    	String pfad = "C:\\Test";
        String dateien[anzahlDateien] = {"Bla.txt", "Blub.txt"};
        String endungen[anzahlDateien] = {"txt", "txt"};
        String titel = "Datei";
        for (int i = 0; i < anzahlDateien; i++)
        {
    		String datei = pfad + "\\" + dateien[i];
    		String neuerName = pfad + "\\" + titel + IntToStr(i + 1) + "." +
                               endungen[i];
            rename(datei.c_str(), neuerName.c_str()); // Fehler: Datei wird nicht umbenannt!
        }
    


  • Ok, ich habe jetzt "rename" durch "MoveFile" ersetzt... Das funktioniert jetzt. Benötige nur noch Hilfe bei dem ersten Problem.



  • für dein erstes Problem hab ich da was, aber es gibt bestimmt noch eine bessere Möglichkeit,
    diese funktioniert aber auch:

    #include<iostream>
    #include<string>
    using namespace std;
    
    int main(){
    
    	string name("D:\Data\datei.ein"),
    		   endung("");
    
    	int len = name.length();
    
    	for(int ppos=len; name[ppos]!='.' && !(ppos<0) ;ppos--);
    
    	for(int pos=ppos; pos<len ;pos++){
    		endung += name[pos];	
    	}
    
    	cout<<"endung:"<<endung<<endl;
    
    	return 0;
    }
    

    erzeugt jedoch beim Compilieren 2 warnings:
    H:\C\C++\040621zuweis_c_int\zuweisHP.cpp(17) : warning C4129: 'D' : unrecognized character escape sequence
    H:\C\C++\040621zuweis_c_int\zuweisHP.cpp(17) : warning C4129: 'd' : unrecognized character escape sequence



  • Eigentlich falsches Forum (gehört IMHO nach Borland C++ Builder (VCL/CLX)),
    aber guck dir mal ExtractFileName, ExtractFilePath, ExtractFileExt usw. an!



  • Danke, hat mir sehr geholfen!


Anmelden zum Antworten