Toon posts:

bestanden kopiëren met progressbar

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben bezig met het maken van een automatische installatie van Win2K.

Nu kopieer ik met XCOPY alle bestanden en submappen vanaf het netwerk naar een andere lokatie. Nu wil ik graag een voortgangsbalk hebben, die aangeeft hoever het kopiëren gevorderd is, omdat het hele proces +/- 15 min in beslag neemt.

Iemand enig idee op welke manier ik dit zou kunnen doen?

  • Mart!
  • Registratie: Februari 2000
  • Laatst online: 23-08 14:17
Welke programmeertaal? Of is het onder command prompt? Iets specifiekere info is hier wel gewenst :)

Btw. bij het XCopy commando kun je niet echt bijhouden hoe ver hij er mee is. Dan zul je toch een custom kopieer-programma moeten maken met een progress-bar. Of je moet uitgaan van die 15 minuten, maar dat is niet op elk systeem hetzelfde en dus niet echt een goede oplossing

[ Voor 59% gewijzigd door Mart! op 14-01-2003 10:39 ]


  • beany
  • Registratie: Juni 2001
  • Laatst online: 20:25

beany

Meeheheheheh

van te voren het totaal aantal bytes optellen van de te kopieeeren bestanden. Je weet dan het totaal te kopieeeren bytes, dus de max van je progressbar. Na het kopieeeren van 1 bestand je progressbar updaten

Dagelijkse stats bronnen: https://x.com/GeneralStaffUA en https://www.facebook.com/GeneralStaff.ua


Verwijderd

Topicstarter
Het gebeurt nu in DOS met XCOPY, dat valt dus inderdaad niet bij te houden hoe ver hij is.

Mijn vraag was eigenlijk met welke programmeertaal dit het makkelijkst zou gaan en hopelijk ook nog wat tips.

  • beany
  • Registratie: Juni 2001
  • Laatst online: 20:25

beany

Meeheheheheh

Indien geen programmeer ervaring:

Visual Basic 6.0
C#

Maar het mooiste is een C/C++ of Delphi programma(die kan draaien zonder afhankelijk te zijn van ondersteunende library's/frameworks)

Dagelijkse stats bronnen: https://x.com/GeneralStaffUA en https://www.facebook.com/GeneralStaff.ua


Verwijderd

Topicstarter
Heb wel programmeerervaring in C++/java/delphi, dus ik ga eens bekijken wat C++ mij te bieden heeft op het gebied van files kopiëren.

  • MrDry
  • Registratie: December 2001
  • Laatst online: 24-08 14:14

MrDry

Desperados!

www.planet-source-code.com

Is vast al eens eerder verzonnen....

Quod licet lovi, non licet bovi


Verwijderd

las je het met delphi wilt doen is hier een voorbeeld

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
procedure CopyFileWithProgressBar(Source, Destination : string);
var
  FromF,
  ToF        : file of byte;
  Buffer     : array[0..4096] of char;
  NumRead    : integer;
  FileLength : longint;
begin
  form1.label1.caption := ' Nu aan het kopieren : ' + source ;
  application.processmessages ;
  AssignFile(FromF,Source);
  reset(FromF);
  AssignFile(ToF,Destination);
  rewrite(ToF);
  FileLength:=FileSize(FromF);
  With form1.gauge1 do
  begin
    progress := 0 ;
    Minvalue := 0;
    Maxvalue := FileLength;
    while FileLength > 0 do
    begin
      BlockRead(FromF,Buffer[0],SizeOf(Buffer),NumRead);
      FileLength := FileLength - NumRead;
      BlockWrite(ToF,Buffer[0],NumRead);
      progress := progress + NumRead;
    end;
    CloseFile(FromF);
    CloseFile(ToF);
end;
end;

  • maikel
  • Registratie: Januari 2001
  • Laatst online: 24-08 12:52
(jarig!)
Kan het uberhaupt wel met een Windows-programma?
Aangezien het gaat om een installatie-programma voor Win2k, is de kans dat er nog geen Windows op staat natuurlijk erg groot.

Misschien in Pascal of zo?
Da's een stuk makkelijker dan in C++ en biedt volgens mij wel voldoende mogelijkhedne.

Verwijderd

Topicstarter
er staat dan inderdaad nog geen Windows op, de PC wordt geboot van een bootdisk, deze maakt verbinding met het netwerk en vanaf daar worden de installatiebestanden naar de schijf gekopieerd.

Verwijderd

ik heb voor de grap een console applicatie geschreven in delphi puur om te oefenen

die zowel een bar laat zien als een percentage.

er zit geen recursie in , dus je moet alle bestanden zelf aangeven
maar mischien vind je het wel handig.

de code maakt gebruik van crt_efd die je nog moet downloaden.
de code is als volgt

als je alleen de exe wilt moet je maar ff je mail adres achterlaten

Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
program Project2;
{$APPTYPE CONSOLE}
uses
  SysUtils, windows, crt_efd;
var
pox, poy        : integer ;
FromF, ToF: file;
NumRead, NumWritten: Integer;
Buf: array[1..8192] of Char;
buffdone : integer ;
teller : integer ;
begin
// get current coordinates
pox := wherex ;
poy := wherey ;
buffdone := 0 ;
teller := 0 ;
if length(paramstr(1)) < 1 then
  begin
  writeln('De syntax is ' + extractfilename(paramstr(0))+ ' [BRON BESTAND] [DOELBESTAND] ');
  exit ;
  end;
if length(paramstr(2)) < 1 then
  begin
  writeln('De syntax is ' + extractfilename(paramstr(0))+ ' [BRON BESTAND] [DOELBESTAND] ');
  exit ;
  end;
if not FileExists(paramstr(1)) then
  begin
  writeln('Bron bestand bestaat niet');
  exit ;
  end;
assignFile(FromF, paramstr(1) );
Reset(FromF,1 );
AssignFile(ToF, paramstr(2));   { Open output file }
Rewrite(ToF, 1) ;
WriteXY(extractfilename(paramstr(1)) + ' [          ] van ' + IntToStr(FileSize(FromF)div 1024) + ' KB',pox,poy,7 ) ;
repeat
  BlockRead(FromF, Buf, SizeOf(Buf), NumRead);
  buffdone := sizeof(buf) + buffdone ;
  teller := (buffdone div (FileSize(FromF) div 10 )) ;
  WriteXY(extractfilename(paramstr(1)) + ' [' + stringofchar(#219,teller)  + stringofchar(' ',10 - teller)+ '] (' + inttostr((buffdone div (FileSize(FromF) div 100 ))) + '%) van ' + IntToStr(FileSize(FromF)div 1024) + ' KB',pox,poy, 7 ) ;
  BlockWrite(ToF, Buf, NumRead, NumWritten);
until (NumRead = 0) or (NumWritten <> NumRead);
CloseFile(FromF);
CloseFile(ToF);
Pagina: 1