Avatar billede hejhejhej Nybegynder
13. januar 2003 - 18:35 Der er 10 kommentarer og
1 løsning

Status for filkopiering

Jeg har lavet et program som kopierer en mappe hen til et andet sted på harddisken. men hvordan laver man en status over hvor langt kopieringen er nået? Er det muligt at benytte en progressbar?
Avatar billede martin_moth Mester
13. januar 2003 - 18:44 #1
For at bruge en progressbar kræver det, at du hele tiden ved hvor meget der er kopieret... Og det er ikke sådan lige at finde ud af, men muligvis vha et API-kald? Prøv at kikke på http://allapi.net/
Avatar billede driis Nybegynder
14. januar 2003 - 01:01 #2
Det nemmeste er at tælle antallet af filer i mappen og så opdatere progressbar'en hver gang én fil er kopieret. Problemet er så, at hver fil giver lige stort et hop på progressbar'en uanset om den fylder 1 kB eller 1 GB. Alternativt kan man også registrere størrelsen på hver fil før man begynder at kopiere og sætte progressbar.max til summen af størrelserne på alle filerne. Så kan man opdatere progressbaren således at den hele tiden angiver procentdelen af datamængden som er kopieret; men progressbar'en vil stadig bevæge sig i 'hop' for hver fil. Hvis der er mange filer, eller de er af nogenlunde samme størrelse, vil man dog ikke lægge mærke til dette.
Avatar billede skumbaq Nybegynder
14. januar 2003 - 11:15 #3
Hvad nu hvis man først tog mappens størrelse og sat bar.max til den

Så indlæser alle filerne fra mappen og undermapperne ind i et string Array

Så åbne filerne en efter en og kopiere dem

Så burde den ikke hoppe

Så er det bare lige det med koden, hvem laver den :-)

Blot en kommentar, driis løsning er meget hurtiger
Avatar billede martin_moth Mester
14. januar 2003 - 11:23 #4
"Så åbne filerne en efter en og kopiere dem" ..?

Vil du åbne dem "byte for byte" i VB og skrive dem igen, for på den måde at kopiere dem?

Uhh - så meget besvær for at få en progress-bar til ikke at springe i hak - jeg tilslutter mig svaret fra driis som den klart nemmeste løsning :o)
Avatar billede skumbaq Nybegynder
14. januar 2003 - 11:35 #5
Den bliver sikkert ret langsom men det er da meget sundt at leje med

Fx hvis man på en senere tidspunkt skal til at sende filerne over internettet med sock

Der er man stort set tvunget til at gøre det sådan.

Her synes jeg dov at se at mangle bruger 1024 byte a gangen
Avatar billede nop Nybegynder
14. januar 2003 - 11:44 #6
Den bedste måde er at finde ud af antal bytes ialt, læs alle mapper igennem og summer størelserne.
Selve kopieringen skal så foregå blokvis, fx 4k ad gangen, det vil ikke være langsomt, og progress baren kan opdateres.
Avatar billede martin_moth Mester
14. januar 2003 - 11:46 #7
Skumbag > Det kan du have ret i, men jeg tror det er skudt lidt over målet i forhold til hejhejhej's program - al respekt :o)

> hejhejhej - har du fået hjælp nok, eller skal fx. driis' udemærkede ide uddybes?

Jeg kan se på www.eksperten.dk/spm/302325 at dit program bruger FSO, så derfor kan du nemt få talt antallet af filer samt få filernes størrelse (myFile.Size), og så er driis's løsning nærliggende :o)
Avatar billede hejhejhej Nybegynder
14. januar 2003 - 13:04 #8
jeg prøver lige og se om jeg kan få en løsning udfra de ideer jeg har fået.
Avatar billede skumbaq Nybegynder
15. januar 2003 - 13:42 #9
Jeg vil ikke åbne filerne med fso, det tager nemlig lidt tid med det, hvis filerne er store fx 700 mb filer

Ret mig her hvis jeg tager fejl !, det virker bare sådan hjemme hos mig.

Skal du have lidt kode til at åbne dem med, så må jeg kikke på det når jeg kommer hjem, kan ikke lige huske det i hoved.
Avatar billede martin_moth Mester
15. januar 2003 - 13:46 #10
> Skubbag: Jeg tror at hejhejhej benytter forslaget fra driis - der skal filerne ikke åbnes(!) Jeg tilføjer så, at når han i forvejen bruger FSO til at kopiere filerne (som fremgår af www.eksperten.dk/spm/302325) , så han også kan bruge FSO til at få filstørrelser og antal med, der jo kræves for at bruge svaret fra driis - Ikke noget med at åbne filer her :o)
Avatar billede hejhejhej Nybegynder
16. januar 2003 - 00:59 #11
I den mappe jeg skal kopiere er der en masse undermapper, så jeg har lavet programmet således at den laver en liste over mappenavnene, hvorefter jeg bruger FSO til at tage hvert enkelt mappe, finde størrelsen på denne og kopiere den. Herefter opdateres progressbaren løbende efter hver kopiering....jeg siger tak forhjælpen
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