![]() |
Delphi-Version: 10.4 Sydney
TFile.Copy Aufruf ergibt Fehlermeldung "Falscher Parmeter"
Hallo,
in einer DLL verwende ich TFile.Copy(fromName,toName,true) zum Kopieren von Dateien. Hier bei mir und auf einem Rechner im Support läuft das alles einwandfrei, nur bei einem Kunden kommt o.g. Fehler. In einem Try / Except Block lasse ich mir dann den Fehler ausgeben: LogAusgabe(E.ClassName + ' in Copierfunktion : ' + E.Message + slinebreak + fromName + slinebreak + toName); Es wird folgendes ausgegeben: EInOutError in Copierfunktion : Falscher Parameter H:\214214.pdf C:\OneDrive\Desktop\758DDE1F-4452-4108-AC2B-C2657DCCDA45.pdf Ich habe keine Ahnung wo ich da ansetzen könnte! Bitte um Unerstützung Ciao Stefan |
AW: TFile.Copy Aufruf ergibt Fehlermeldung "Falscher Parmeter"
Vorhandensein von Laufwerken (gemappte Netzlaufwerke?), Verzeichnissen und Dateien wird VORHER geprüft?
|
AW: TFile.Copy Aufruf ergibt Fehlermeldung "Falscher Parmeter"
Datei/Verzeichnis offline? (OneDrive)
Geht es denn mit einem normalen Verzeichnis? |
AW: TFile.Copy Aufruf ergibt Fehlermeldung "Falscher Parmeter"
Wenn H:\ ein USB-Laufwerk ist, dann könnte es auch einfach Formatierungsprobleme geben.
Kann man denn mit Explorer dort was hinkopieren ? Ich hatte schon Fälle wo fremd-formatierte USB-Drives nicht lesbar/schreibbar waren, obwohl sie erstmal ordentlich aussahen und eingebunden waren, ein Neuformatieren auf dem jeweiligen Rechner hat geholfen. Am Besten immer vorher Schritt-für-Schritt Testen bis wohin was noch geht (Laufwerkszugriff, Directory, File, Rechte, ....), je detaillierter die Fehlermeldungen desto besser auf einem Kundenrechner. |
AW: TFile.Copy Aufruf ergibt Fehlermeldung "Falscher Parmeter"
1. Kann es sein, dass die Zieldatei schon existiert und von jemandem geöffnet ist?
Wenn ich das richtig verstehe, dann ist der letzte Parameter(=True) beim File.Copy sorgt dafür, dass die Datei überschrieben sein sollte? Vielleicht liegt es daran? 2. Mit Windows-Explorer funktioniert das Kopieren von diesen Dateien? 3. Und ja, ich hoffe, dass es vor dem Kopieren geprüft wird, ob die Ziel- und Quell-Dateien existieren. |
AW: TFile.Copy Aufruf ergibt Fehlermeldung "Falscher Parmeter"
Ja, es wird geprüft ob die Quelldatei vorhanden ist, dann wird kopiert...
Ich habe ein Testprogramm gebastelt, welches eine Datei, bei der der Fehler auftrat, 1000 mal kopiert. Beim ca. 200. Mal dann wieder der Fehler und auf dem Server (Laufwerk H) nachsehen lassen und siehe da, da hat sich Norton irgendwie gestört gefühlt, warum auch immer... Kunde soll jetzt seinen Norton bändigen, an uns liegt es nicht :-) Ciao Stefan |
AW: TFile.Copy Aufruf ergibt Fehlermeldung "Falscher Parmeter"
Kopierst du evtl. viele Dateien hintereinander?
Dann kann es sein das der Virenscanner nicht mehr hinterher kommt und über ein Veto/Block das kopieren unterbindet. Hier haben wir mittlerweile ein RetryAfter200ms eingebaut... |
AW: TFile.Copy Aufruf ergibt Fehlermeldung "Falscher Parmeter"
Ja, es werden teilweise sehr viele Dateien hintereinander kopiert...
Wenn da ein Virenscanner "nicht hinterherkommt und blockiert" taugt der meiner Meinung nach nicht... Ciao Stefan |
AW: TFile.Copy Aufruf ergibt Fehlermeldung "Falscher Parmeter"
Zitat:
|
AW: TFile.Copy Aufruf ergibt Fehlermeldung "Falscher Parmeter"
Kaspersky taugt ja auch wirklich nicht...mit seinen ganzen false-positives.
Bei Sophos dachte ich immer es wäre eine Firewall , die haben auch Virenscanner? Auf jedenfall scheint Sophos für System-Administratoren nicht intuitiv bedienbar zu sein, weil sie in der Regel mehrere Versuche und mehrere Tage für Portfreigaben brauchen. Zitat:
Delphi-Quellcode:
uses Shellapi;
//Does not work in debug mode...unless debugger is setup to handle the c000000005 exception function DoFileWork(aOperation: FILEOP_FLAGS; aFrom, aTo: String;Flags: FILEOP_FLAGS): Integer; var FromPath, ToPath: String; SHFileOpStruct: TSHFileOpStruct; begin SetLastError(0); ZeroMemory(@SHFileOpStruct,SizeOf(SHFileOpStruct)); with SHFileOpStruct do begin wFunc := aOperation; pFrom := PAnsiChar(aFrom+ #0#0); if aTo <> '' then begin pTo := PAnsiChar(aTo+ #0#0) end else begin // target available pTo := nil; end; // target not available fFlags := Flags; end; // structure Result := SHFileOperation(SHFileOpStruct); end;
Delphi-Quellcode:
Der Code ist für D2007... also muss evtl für andere Delphis angepasst werden.
if 0 <> DoFileWork(FO_COPY,
ExcludeTrailingPathDelimiter(SourcePath) , ExcludeTrailingPathDelimiter(DestPath), FOF_NOCONFIRMATION or FOF_NOCONFIRMMKDIR or FOF_RENAMEONCOLLISION) then Begin Error := GetLastError; if Error <> 0 then ShowMessage('Fehler beim Kopieren nach'+ExcludeTrailingPathDelimiter(DestPath)+' :'+ SysErrorMessage(error) ); End; SHFileOperation benutzt quasi den windows DateiExplorer und der müsste gut mit dem Virenscanner zusammen arbeiten. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:27 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-2025 by Thomas Breitkreuz