Avatar billede canker Nybegynder
27. december 2002 - 13:22 Der er 8 kommentarer og
2 løsninger

fil kopiering

Hvad kalder jeg for at kopiere en fil, som bliver "håndteret" af windows - dvs. så der kommer den sædvanlige statusbar for kopieringen frem??
Avatar billede snowball Novice
27. december 2002 - 13:24 #1
Prøv og kig lidt på Borrisholt's FileHandling

http://www.borrisholt.com/FileIO/DelphiSource/Filehandling.zip

Snowball
Avatar billede canker Nybegynder
27. december 2002 - 14:44 #2
jeg mener at der er et direkte kald til at kunne lave det
Avatar billede doc404 Novice
27. december 2002 - 16:23 #3
uses
  ShellApi;

procedure ShellFileOperation(fromFile: string; toFile: string; Flags: Integer);
var
  shellinfo: TSHFileOpStructA;
begin
  with shellinfo do
  begin
    wnd  := Application.Handle;
    wFunc := Flags;
    pFrom := PChar(fromFile);
    pTo  := PChar(toFile);
  end;
  SHFileOperation(shellinfo);
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
  ShellFileOperation('c:\afile.txt', 'd:\afile2.txt', FO_COPY);  // To Move a file: FO_MOVE
end;
Avatar billede borrisholt Novice
28. december 2002 - 11:23 #4
nåååe så brug CopyFileEx

Jens B
Avatar billede canker Nybegynder
30. december 2002 - 10:07 #5
jeg prøver dette: 

copyfileex('c:\test.doc','c:\test\test.doc',nil,nil,nil,COPY_FILE_RESTARTABLE);

den kopierer, men ikke med statusbar??
Avatar billede borrisholt Novice
30. december 2002 - 10:19 #6
Øøøh nej .. Nu har jo lige sat lpProgressRoutine til nil !

Jens B
Avatar billede doc404 Novice
30. december 2002 - 10:21 #7
Det kan den heller ikke medmindre du implementere callback og selv viser et eller andet...
Avatar billede canker Nybegynder
30. december 2002 - 10:53 #8
>doc

når jeg prøver dit eksempel, kopierer den fint (dog uden statusbar), men den kommer med en fejlmeddelelse "kan ikke kopiere. den angivne fil blev ikke fundet "
Selvom denne fejlmeddelelse kommer, ER filen kopieret
Avatar billede borrisholt Novice
30. december 2002 - 10:58 #9
Prøv den her :

procedure JBCopyFile(const InFile, OutFile: TFileName; aProgressBar: TProgressBar);

  function CopyCallback(
    TotalFileSize, TotalBytesTransferred, StreamSize, StreamBytesTransferred: INT64;
    dwStreamNumber, dwCallbackReason: DWORD;
    hSourceFile, hDestinationFile: THandle;
    aProgressBar: TProgressBar): DWORD; stdcall;
  var
    NewPos: Integer;
  begin
    Result := PROGRESS_CONTINUE;
    if dwCallbackReason = CALLBACK_CHUNK_FINISHED then
    begin
      NewPos := Round(TotalBytesTransferred / TotalFileSize * 100);
      with aProgressBar do
        if NewPos <> Position then
          Position := NewPos;
      Application.ProcessMessages;
    end;
  end;

var
  b: Bool;

  function DoFilecopy(const Source, Target: string): Boolean;
  begin
    try
      if Assigned(aProgressBar) then
      begin
        aProgressBar.Position := 0;
        aProgressBar.Max := 100;
        Result := CopyFileEx(PChar(Source), PChar(Target), @CopyCallback, aProgressBar, @b, 0);
      end
      else
        Result := CopyFileEx(PChar(Source), PChar(Target), nil, nil, nil, 0);
    except
      Result := false;
    end;
  end;

begin
  b := false;
  DoFilecopy(inFile, Outfile);
end;


(Frit fra leveren)

Jens B
Avatar billede canker Nybegynder
30. december 2002 - 11:07 #10
jeg var ca. nået frem til det samme :-D
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester