Einzelnen Beitrag anzeigen

Morph

Registriert seit: 25. Dez 2007
4 Beiträge
 
#14

Re: Kann man auch Ordner kopieren???

  Alt 25. Dez 2007, 11:47
Zitat von Matze:
Hallo herzlich Willkommen!

Es gibt die Parameter "FOF_NOERRORUI or FOF_NOCONFIRMATION", nur ob die das bewirken, was du gerne hättest, weiß ich nicht. Das müsstest du mal ausprobieren.

Die Frage ist, was genau du erreichen möchtest. Denn bei einem Kopiervorgang Dateien zu überspringen ist unter Umständen nicht so günstig, da man so nicht weiß, ob der Kopiervorgang vollständig war oder nicht.

Um ein Backup zu erstellen würde sich beispielsweise auch bitweises Kopieren anbieten.
Mein Problem ist folgendes:


Mein Vater schießt immer einen Haufen Photos, die er auf seiner Festplatte speichert. Wenn er jetzt die ganzen Dateien auf eine externe HDD kopieren will, bricht das ganze immer ab, weil irgendwo "defekte Dateien" dabei sind. Nun wollte ich ein Programm in Delphi schreiben, welches das Problem behebt, indem es die fraglichen Dateine (sprich: höchstwahrscheinlich Photos) überspringt. Das Programm sollte aber natürlich auch generell funktionieren^^

Man könnte sich das ganze also wie den XCOPY-Befehl mit dem /C- Parameter vorstellen, nur halt hübsch verpackt in einem Delphiprogramm mit frei wählbarem Quell-und Zielpfad, was ich ja bisher auch geschafft habe

Mir fehlt halt lediglich noch dieser /C- Parameter, also das Kopieren der Ordner bzw. Dateien, auch wenn Fehler auftreten.

Werde jetzt erstmal deine Parameter ausprobieren.

Gruß,

Morph


PS: Bin übrigens noch nicht wirklich ein Delphi-Kenner, beschäftige mich erst seit 2 Monaten damit. Deshalb würde ich darum bitten, mir immer ein bisschen zu erklären, was ich wo machen soll


Edit: Wo soll ich denn deine Parameter einbauen, damit das ganze funktioniert?
Delphi-Quellcode:
 unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Buttons;

type
  TiXCOPY = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    BitBtn1: TBitBtn;
    iXCOPY: TLabel;
    Label1: TLabel;
    Label2: TLabel;
    BitBtn2: TBitBtn;
    BitBtn3: TBitBtn;
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
    procedure BitBtn3Click(Sender: TObject);

  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  iXCOPY: TiXCOPY;
  A, B : String;





implementation

uses
  ShellAPI;

{$R *.dfm}

function DoFileWork(aOperation: FILEOP_FLAGS; aFrom, aTo: AnsiString;
    Flags: FILEOP_FLAGS): Integer;
var
  FromPath, ToPath: AnsiString;
  SHFileOpStruct: TSHFileOpStruct;
begin
  FromPath := aFrom + #0#0;
  ToPath := aTo + #0#0;
  with SHFileOpStruct do
  begin
    Wnd := 0;
    wFunc := aOperation;
    pFrom := PAnsiChar(FromPath);
    if ToPath <> 'then
    begin
      pTo := PAnsiChar(ToPath)
    end else begin // target available
      pTo := nil;
    end; // target not available
    fFlags := Flags;
  end; // structure
  Result := SHFileOperationA(SHFileOpStruct);
end;

procedure TiXCOPY.BitBtn1Click(Sender: TObject);
begin
  A := edit1.text;
  B := edit2.text;
  DoFileWork(FO_COPY, A, B, 0);
end;


procedure TiXCOPY.BitBtn2Click(Sender: TObject);
begin
     close;
end;

procedure TiXCOPY.BitBtn3Click(Sender: TObject);
begin
     edit1.text := '';
     edit2.text := '';
end;

end.
  Mit Zitat antworten Zitat