Wieso gibst du eigentlich DirectoryExists und CreateDir einen Pfad ("Path" mit abschließendem "\") und kein Verzeichnis ("Dir") ?
Wenn man das mal halbwegs irdentlich formatiert ... Warum wird das Break nur gemacht, wenn das Verzeichnis existierte, aber die Datei nicht?
Wenn das Verzeichnis nicht existiert, dann existiert die Datei doch auch nicht.
Delphi-Quellcode:
if not DirectoryExists('C:\pdfbenannt\'+dirname+'\') then
CreateDir('C:\pdfbenannt\'+dirname+'\')
else
if not FileExists('C:\pdfbenannt\'+fname+'.pdf') then
Break
else
{nix};
Warum eigentlich zwei Schleifen und wieso nur in der Ersten das Break?
Wenn man jetzt eine Fehlerprüfung einfügt, würde einem das schön auf die Füsse fallen, da die Funktion natürlich den Fehler "Datei existiert nicht" wirft.
Tipp:
ForceDirectories
verfrachtet die Dateien jedoch nicht hinein. Kann mir jetzt jemand weiter helfen?
Nee, aber warum fragst du RenameFile nicht? Das weiß doch das Warum und nennt es dir auch.
Delphi-Quellcode:
procedure TForm1.btnstartSortClick(Sender: TObject);
var
i: Integer;
fname, dirname: string;
begin
for i := 1 to 248 do begin
fname := StringGrid.Cells[1, i];
dirname := StringGrid.Cells[2, i];
if not FileExists('C:\pdfbenannt\'+fname+'.pdf') then
Break; // oder Continue?
ForceDirectories('C:\pdfbenannt\'+dirname);
if not RenameFile('C:\pdfbenannt\'+dirname+'.pdf','C:\pdfbenannt\'+dirName+'\'+fname+'.pdf') then
RaiseLastOSError;
end;
ShowMessage(fertig');
end;
RaiseLastOSError oder
RaiseLastWin32Error (in alten Delphis), bzw.
GetLastError und
SysErrorMessage
oder
TDirectory.CreateDirectory +
TFile.Move (CreateDirectory = ForceDirectories).