![]() |
Shellfileoperation (Datei kann nicht kopiert werden)
Hi!
Ja ich habe ein Problem bei Dateienkopieren mit Shellfileoperation. Mein Programm sagt mir immer: "Datei kann nicht kopiert werden: Die Quelldatei oder vom Quelldatenträger kann nicht gelesen werden." Also mein Code zum kopieren sieht so aus:
Delphi-Quellcode:
Und mein Code vom Button der die Aktion auslöst sieht so aus.
procedure ShellFileOperation(fromFile: string; toFile: string; Flags: Integer);
var shellinfo: TSHFileOpStructA; begin with shellinfo do begin wnd := Application.Handle; wFunc := Flags; fFlags := FOF_NOCONFIRMATION; pFrom := PChar(fromFile); pTo := PChar(toFile); end; SHFileOperation(shellinfo); end;
Delphi-Quellcode:
Das seltsame an dem Problem ist, dass es nur manchaml geht.
procedure TForm1.Button2Click(Sender: TObject);
var s: string; var Ini: TIniFile; begin try Ini:=TIniFile.Create(GetCurrentDir+'\Pfad.ini'); Ini.WriteString('Section','FIFA Pfad',Label1.Caption); finally Ini.Free; end; begin if RadioButton1.Checked then begin ShellFileOperation(GetCurrentDir+'\ORG_Daten\fifa.db', Label1.Caption+'\data\cmn', FO_COPY); ShellFileOperation(GetCurrentDir+'\ORG_Daten\ger.db', Label1.Caption+'\data\cmn\fe', FO_COPY); end; if RadioButton2.Checked then begin ShellFileOperation(GetCurrentDir+'\WSL_Daten\fifa.db', Label1.Caption+'\data\cmn', FO_COPY); ShellFileOperation(GetCurrentDir+'\WSL_Daten\ger.db', Label1.Caption+'\data\cmn\fe', FO_COPY); end; end; end; Manchmal macht er auch nur bei einem File Probleme. Die Ordner WSL_Daten und ORG_Daten existieren auch in meinem Areitsverzeichnis und die Dateien dortdrin auch. Deswegen verstehe ich das Problem nicht so recht. Wäre über Hilfestellungen sehr dankbar=) LG David Geis |
Re: Shellfileoperation (Datei kann nicht kopiert werden)
Und wenn Du an die Verzeichnisnamen mal ein "\*" anhängst?
|
Re: Shellfileoperation (Datei kann nicht kopiert werden)
Zitat:
Weil die zwei Dateien sollen ja in unterschiedliche Ordner kopiert werden. Und er hat ja anscheinend ein Problem mit der Quelldatei. Oder wie meinst du das? |
Re: Shellfileoperation (Datei kann nicht kopiert werden)
Sry, hatte gar nicht gesehen, dass es sich um Dateien handelt.
[edit] Du könntest aber auch CopyFile benutzen. [/edit] |
Re: Shellfileoperation (Datei kann nicht kopiert werden)
Mit Copyfile macht er sich leider erst gar nicht die Mühe zu kopieren.
Vermute aber, dass es daran liegt, dass ich mit einem Klick auf den Button auch noch die Ini schreibe. Ich denke die Variablen behaken sich, denn er lädt jetzt auch das Ini File nicht mehr, was ja auch durch eine Variable getätigt wird. Nur habe ich leider keine Ahnung wie ich das ändere Mein Variablen:
Delphi-Quellcode:
Und mein Copyfile Code:
procedure TForm1.Button2Click(Sender: TObject);
var s: string; var Ini: TIniFile; var von, nach: string;
Delphi-Quellcode:
begin
if RadioButton1.Checked then begin von := GetCurrentDir+'\ORG_Daten\fifa.db'; nach := Label1.Caption+'data\cmn\fifa.db'; Copyfile(PChar(von),PChar(nach), false); end; |
Re: Shellfileoperation (Datei kann nicht kopiert werden)
Delphi-Quellcode:
Versuch es mal so (aus dem Kopf und ungetestet).
procedure TForm1.Button2Click(Sender: TObject);
var s: string; Ini: TIniFile; von, nach: string; begin //irgendwas mit der Ini machen if RadioButton1.Checked then begin von := IncludeTrailingPathDelimiter(GetCurrentDir) + 'ORG_Daten\fifa.db'; nach := IncludeTrailingPathDelimiter(Label1.Caption) + 'data\cmn\fifa.db'; if not Copyfile(PChar(von),PChar(nach), false) then MessageBox(Handle,PChar(SysErrorMessage(GetLastError)),'Fehler',MB_OK or MB_ICONERROR); end; end; |
Re: Shellfileoperation (Datei kann nicht kopiert werden)
Hallo David,
in der ![]() Zitat:
Delphi-Quellcode:
Gruß Hawkeye
pFrom := PChar(fromFile + #0);
pTo := PChar(toFile + #0); |
Re: Shellfileoperation (Datei kann nicht kopiert werden)
Ich würde dir auch CopyFile empfehlen, dass ist meiner Meinung nach sagor einfacher^^
|
Re: Shellfileoperation (Datei kann nicht kopiert werden)
Oh man ich komm hier nicht mehr klar-.-
Also ich fang mal an zu erzählen^^ Habe mein Programm fertiggestellt und dann kompiliert. Dann habe ich ne Setuproutine erstellt und dann hab ich die mal zum Testen aufm Rechner installiert. Alles schön und gut klappt auch einwandfrei. Nunja dann hab ich über den Desktopshortcut mein Programm geöffnet. Dann der Schock: Beim kopieren zeigt er mir nen Fehler, von wegen er könnte die Datei nicht finden. Nunja ich dachte schon ich könnte wieder alles in die Pfanne kloppen. Dann habe ich das programm über die *.exe im Programme Ordner geöffnet. Und siehe da alles funktioniert. Also ich dann wieder über den Desktop probiert und es geht wieder nicht. Meine Schlussfolgerung war, dass er vielleicht (weil ich ja den Befehl "GetCurrentDir" zum kopieren benutze) den aktuellen Ordner der Verknüpfung auf dem Desktop nimmt. Naja jetzt wo ich gerade diese Antwort schreibe will ich nochmal per Shortcut kopieren, damit er mir den Fehler nochmal anzeigt, um ihn abtippen zu können. Und siehe da es geht! Ich verstehe nur nicht warum, denn ich habe nichts geändert. Das ist wirklich sehr seltsam, denn so kann ich das Programm ja nicht veröffentlichen, wenn es manchmal geht und manchmal nicht. Nunja vielleicht könnt ihr mir ja helfen. Mein Kopiervorgang sieht wie folgt aus:
Delphi-Quellcode:
Ich vermute mal es ist mal wieder ziemlich shclecht geschrieben, wie immer bei mir.
procedure TForm1.Button2Click(Sender: TObject);
var von1, nach1: string; von2, nach2: string; von3, nach3: string; von4, nach4: string; begin if RadioButton1.Checked then begin von1 := GetCurrentDir+'\ORG_Daten\fifa.db'; nach1 := Label1.Caption+'data\cmn\fifa.db'; Copyfile(PChar(von1),PChar(nach1), false); if not Copyfile(PChar(von1),PChar(nach1), false) then MessageBox(Handle,PChar(SysErrorMessage(GetLastError)),'Fehler',MB_OK); von2 := GetCurrentDir+'\ORG_Daten\ger.db'; nach2 := Label1.Caption+'data\cmn\fe\ger.db'; Copyfile(PChar(von2),PChar(nach2), false); if not Copyfile(PChar(von2),PChar(nach2), false) then MessageBox(Handle,PChar(SysErrorMessage(GetLastError)),'Fehler',MB_OK); end; if RadioButton2.Checked then begin von3 := GetCurrentDir+'\WSL_Daten\fifa.db'; nach3 := Label1.Caption+'data\cmn\fifa.db'; Copyfile(PChar(von3),PChar(nach3), false); if not Copyfile(PChar(von3),PChar(nach3), false) then MessageBox(Handle,PChar(SysErrorMessage(GetLastError)),'Fehler',MB_OK); von4 := GetCurrentDir+'\WSL_Daten\ger.db'; nach4 := Label1.Caption+'data\cmn\fe\ger.db'; Copyfile(PChar(von4),PChar(nach4), false); if not Copyfile(PChar(von4),PChar(nach4), false) then MessageBox(Handle,PChar(SysErrorMessage(GetLastError)),'Fehler',MB_OK); end; end; Achso sry auch für den Roman den ich geschrieben habe und danke schonmal für die Antworten die gekommen sind un kommen werden, so wie ich euch einschätze=) LG David Geis |
Re: Shellfileoperation (Datei kann nicht kopiert werden)
Bist Du Dir auch sicher, dass GetCurrentDir auf das richtige Verzeichnis verweist?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:06 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