Problem mit Verschiebe-Programm
-
Hi ich habe heute Nachmittag ein kleines Programm geschrieben.
Es soll einen Ordner der Dateien in der Form xyz-v.irgendwas.irgendwas
in Ordner mit den Namen xyz-v aufteilen. Ich hab es soweit geschafft aber leider kopiert er immer nur die erste datei im Verzeichnis
Der Quellcode:WIN32_FIND_DATA filedata; HANDLE filehandle; String newdirname; // int i; bool ok=true; if(dir==""){ Application->MessageBoxA("Sie müssen einen Pfad wählen","Hinweis",64); return; } Memo1->Lines->Add("Bearbeite das Verzeichnis: "+dir); Memo1->Lines->Add("----------------------------------------Starte Vorgang----------------------------------------"); filehandle = FindFirstFile((dir+"\\*.*").c_str(), &filedata); bool found = (filehandle != INVALID_HANDLE_VALUE); while (found == true) { if((filedata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)==0){ String subDirName=String(filedata.cFileName); int i=1; while(i<subDirName.Length() && ok){ if(String(subDirName[i]) =="."){ ok=false; }else{ i++; } } newdirname=String(filedata.cFileName); newdirname.Delete(i,newdirname.Length()-i+1); if(!DirectoryExists((dir+"\\"+newdirname).c_str())){ MkDir(dir+"\\"+newdirname); if(!DirectoryExists(dir+"\\"+newdirname)){ Application->MessageBoxA(("Fehler beim erstellen des Verzeichnis: "+dir+"\\"+newdirname).c_str(),"Fehler",16); Memo1->Lines->Add("Fehler beim erstellen des Verzeichnis: "+dir+"\\"+newdirname); Memo1->Lines->Add("Es wird abgebrochen!"); return; } } if(!MoveFile((dir+"\\"+subDirName).c_str(),(dir+"\\"+newdirname+"\\"+subDirName).c_str())){ Application->MessageBoxA("Fehler beim verschieben einer Datei","Fehler",16); Memo1->Lines->Add("Fehler beim verschieben der Datei: "+subDirName); Memo1->Lines->Add("Es wird abgebrochen!"); return; } Memo1->Lines->Add("Die Datei: "+subDirName+" wurde erfolgreich in das Verzeichnis "+dir+"\\"+newdirname+" verschoben"); } found = FindNextFile(filehandle, &filedata); } FindClose(filehandle); Memo1->Lines->Add("----------------------------------------Erfolgreich beendet!----------------------------------------");Ich hoffe es kann mir jemand helfen
LG XBert
-
der Fehler befindet sich in Zeile 20 (while-Schleife): du hast den Wert von "ok" nicht wieder zurück gesetzt
noch ein paar Tipps:
- falls du nur die Dateiendung entfernen willst schau dir mal die Funktion ChangeFileExt an
- um den Punkt zu finden kannst du auch die AnsiString-Methode Pos verwenden
-
Linnea schrieb:
- um den Punkt zu finden kannst du auch die AnsiString-Methode Pos verwenden
Oder LastDelimiter, schliesslich kann ein Dateiname ja mehrere Punkte enthalten.
-
danke ich hab das problem dann am abend auch noch gefunden.
aber das mit den mehreren punkten stimmt so wie ich es hab weil ich nur
den teil vorm 1sten Punkt brauch