AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Shellfileoperation (Datei kann nicht kopiert werden)
Thema durchsuchen
Ansicht
Themen-Optionen

Shellfileoperation (Datei kann nicht kopiert werden)

Ein Thema von freeriders · begonnen am 7. Mär 2008 · letzter Beitrag vom 8. Mär 2008
Antwort Antwort
Seite 1 von 2  1 2      
freeriders

Registriert seit: 24. Feb 2008
15 Beiträge
 
#1

Shellfileoperation (Datei kann nicht kopiert werden)

  Alt 7. Mär 2008, 16:00
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:
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;
Und mein Code vom Button der die Aktion auslöst sieht so aus.
Delphi-Quellcode:
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;
Das seltsame an dem Problem ist, dass es nur manchaml geht.
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Shellfileoperation (Datei kann nicht kopiert werden)

  Alt 7. Mär 2008, 16:02
Und wenn Du an die Verzeichnisnamen mal ein "\*" anhängst?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
freeriders

Registriert seit: 24. Feb 2008
15 Beiträge
 
#3

Re: Shellfileoperation (Datei kann nicht kopiert werden)

  Alt 7. Mär 2008, 16:18
Zitat von DeddyH:
Und wenn Du an die Verzeichnisnamen mal ein "\*" anhängst?
Meinst du an die Zielverzeichnisse?
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?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Shellfileoperation (Datei kann nicht kopiert werden)

  Alt 7. Mär 2008, 16:38
Sry, hatte gar nicht gesehen, dass es sich um Dateien handelt.

[edit] Du könntest aber auch CopyFile benutzen. [/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
freeriders

Registriert seit: 24. Feb 2008
15 Beiträge
 
#5

Re: Shellfileoperation (Datei kann nicht kopiert werden)

  Alt 7. Mär 2008, 17:45
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:
procedure TForm1.Button2Click(Sender: TObject);

var s: string;
var Ini: TIniFile;
var
von, nach: string;
Und mein Copyfile Code:
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;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Shellfileoperation (Datei kann nicht kopiert werden)

  Alt 7. Mär 2008, 17:59
Delphi-Quellcode:
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;
Versuch es mal so (aus dem Kopf und ungetestet).
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#7

Re: Shellfileoperation (Datei kann nicht kopiert werden)

  Alt 7. Mär 2008, 18:28
Hallo David,

in der Dokumentation von Microsoft steht unter anderem folgendes zu den Feldern pFrom und pTo:

Zitat:
Although this member is declared as a single null-terminated string, it is actually a buffer that can hold multiple null-delimited file names. Each file name is terminated by a single NULL character. The last file name is terminated with a double NULL character ("\0\0") to indicate the end of the buffer.
Versuche es einmal so:

Delphi-Quellcode:
pFrom := PChar(fromFile + #0);
pTo := PChar(toFile + #0);
Gruß Hawkeye
  Mit Zitat antworten Zitat
Larsi

Registriert seit: 10. Feb 2007
2.262 Beiträge
 
Delphi 2007 Professional
 
#8

Re: Shellfileoperation (Datei kann nicht kopiert werden)

  Alt 7. Mär 2008, 18:44
Ich würde dir auch CopyFile empfehlen, dass ist meiner Meinung nach sagor einfacher^^
Ein Tag ohne Delphi ist ein verlorener Tag!

Homepage zu meinem neuen Programm: StreamZ
  Mit Zitat antworten Zitat
freeriders

Registriert seit: 24. Feb 2008
15 Beiträge
 
#9

Re: Shellfileoperation (Datei kann nicht kopiert werden)

  Alt 7. Mär 2008, 20:53
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:
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;
Ich vermute mal es ist mal wieder ziemlich shclecht geschrieben, wie immer bei mir.

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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Shellfileoperation (Datei kann nicht kopiert werden)

  Alt 7. Mär 2008, 21:06
Bist Du Dir auch sicher, dass GetCurrentDir auf das richtige Verzeichnis verweist?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz