![]() |
Delphi-Version: 2010
RenameFile schlägt fehl - falscher Parameter
Hallo,
ich versuche gerade eine Datei per RenameFile umzubenennen. Die Variable strOldFile enthält "D:\Test\01_Voyager_of_the_future.mp3" (ohne die doppelten Anführungszeichen), die Variable strNewFile enthält "01-Voyager of the future.mp3". Der Code:
Delphi-Quellcode:
Die Quelldatei existiert, die Zieldatei nicht.
if not Renamefile(strOldFile, strNewFile) then
begin ShowWarning('Fehler bei Umbenennen von ' + #13#10 + strOldfile + #13#10 + 'nach' + #13#10 + strNewFile); ShowMessage(SysErrorMessage(GetLastError)); break; end; Der Fehler, der von SysErrorMessage zurückgegeben wird, lautet: "Falscher Parameter". Ich dachte zuerst, es würde an den Leerzeichen liegen, aber das Ändern des neuen Dateinamens auf "test0.mp3" brachte die gleiche Fehlermeldung. Auch spielt es keine Rolle, ob ich bei dem neuen Dateinamen den Pfad mit angebe oder nicht. Hat vielleicht jemand eine Idee, woran das liegen könnte? Grüße Frank |
AW: RenameFile schlägt fehl - falscher Parameter
Prüfe doch vorher ab, ob die Quelldatei existiert.
|
AW: RenameFile schlägt fehl - falscher Parameter
Hab ich (mit "if Fileexists(..."), Datei existiert
|
AW: RenameFile schlägt fehl - falscher Parameter
Sind die nötigen Rechte auf das Verzeichnis/die Datei vorhanden?
|
AW: RenameFile schlägt fehl - falscher Parameter
Kleiner Hinweis, den ich auch schon in einem anderen Thema zu
![]() ![]() ![]() ![]() Zitat:
|
AW: RenameFile schlägt fehl - falscher Parameter
Zitat:
Delphi-Quellcode:
strNewfile:=ExtractFilePath(strOldFile) + '01-Voyager of the future.mp3';
|
AW: RenameFile schlägt fehl - falscher Parameter
Zitat:
Delphi-Quellcode:
if not Renamefile(strOldFile, strNewFile) then
begin E := GetLastError; ShowWarning('Fehler bei Umbenennen von ' + #13#10 + strOldfile + #13#10 + 'nach' + #13#10 + strNewFile); ShowMessage(SysErrorMessage(E)); break; end;
Delphi-Quellcode:
oder gleich
if not Renamefile(strOldFile, strNewFile) then
begin S := SysErrorMessage(GetLastError); ShowWarning('Fehler bei Umbenennen von ' + #13#10 + strOldfile + #13#10 + 'nach' + #13#10 + strNewFile); ShowMessage(S); break; end;
Delphi-Quellcode:
PS:
if not Renamefile(strOldFile, strNewFile) then
begin E := GetLastError; //ShowWarning('Fehler bei Umbenennen ' + sLineBreak + // 'von ' + strOldfile + sLineBreak + // 'nach' + strNewFile + sLineBreak + // SysErrorMessage(E)); ShowWarning(Format('Fehler bei Umbenennen '#13#10'von %s'#13#10'nach %s'#13#10'%s', [strOldfile, strNewFile, SysErrorMessage(E)])); break; end; ![]() ![]() Aber hier macht es eigentlich keinen Sinn, daß Delphi/Embarcadero da noch anderen Code einfügt, da nur eine Konvertierung von String auf PChar nötig ist.
Delphi-Quellcode:
function RenameFile(const OldName, NewName: string): Boolean;
begin {$IFDEF MSWINDOWS} Result := MoveFile(PChar(OldName), PChar(NewName)); {$ENDIF MSWINDOWS} {$IFDEF POSIX} Result := __rename(PAnsiChar(UTF8String(OldName)), PAnsiChar(UTF8String(NewName))) = 0; {$ENDIF POSIX} end; |
AW: RenameFile schlägt fehl - falscher Parameter
Hallo,
ich hab jetzt folgenden Code:
Delphi-Quellcode:
Dank dem Vorschlag von Himitsu hab ich SysErrorMessage vor die eigentliche Fehlermeldung gestellt und bekam
if not MoveFileEx(PChar(strOldFile), PChar(strNewFile), MOVEFILE_COPY_ALLOWED) then
begin ShowMessage(SysErrorMessage(GetLastError)); ShowWarning('Fehler bei Umbenennen von ' + #13#10 + strOldfile + #13#10 + 'nach' + #13#10 + strNewFile); end; "Der Prozess kann nicht auf die Datei zugreifen, da die Datei von einem anderen Prozess verwendet wird." Also im ProcessExplorer nachgeschaut und tatsächlich was gefunden: <Non-Existent Process> 2440 Handle D:\Test\01_Voyager_of_the_future.mp3 Zwar nicht sehr aussagekräftig, aber da der (das?) Handle nicht gefunden wird, solange mein Programm nicht läuft, war klar, dass es mein eigenes Programm war, das die Datei im Zugriff hält. Ursache war folgendes; Die Dateinamen werden (zusammen mit anderen Infos) in ein Grid eingelesen. Ausserdem werden MP3-Infos ausgelesen. Zu diesem Zweck werden in einer Schleife (für alle Dateien...) Streams erzeugt. Dummerweise habe ich zwar fleissig Streams erzeugt, da aber die Freigabe .Free ausserhalb der Schleife lag, wurde nur der zuletzt erzeugte Stream wieder freigegeben, alle anderen (und damit die Dateizugriffe) blieben bestehen :wall: @Assarbad: Das mit dem "Pfad spielt keine Rolle" war so gemeint, dass der Fehler trotzdem kam, ob mit Pfad oder ohne. Sobald der Zugriff funktioniert, merkt man sehr schnell, wie wichtig die Angabe des Pfads bei der Zieldatei ist :P Danke, Community, hätte ich ohne euch nicht gefunden :thumb: Frank |
AW: RenameFile schlägt fehl - falscher Parameter
Jupp. Bei Datei-Stream wird das Handle auf die Datei mit dem Aufruf von Free geschlossen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:20 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz