/ Forside / Teknologi / Udvikling / VB/Basic / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
VB/Basic
#NavnPoint
berpox 2425
pete 1435
CADmageren 1251
gibson 1230
Phylock 887
gandalf 836
AntonV 790
strarup 750
Benjamin... 700
10  tom.kise 610
Appende store filer
Fra : Morten Nissen


Dato : 24-01-04 11:53

Hej Ng,

Findes der ikke en hurtig måde at appende en fil ind i bunden af en
anden fil?

I dag bruger jeg FileSystemObject til at lave en tout.write
tind.readall.

Er det den hurtigste måde?

../Morten

 
 
Tomas Christiansen (25-01-2004)
Kommentar
Fra : Tomas Christiansen


Dato : 25-01-04 00:41

Morten Nissen skrev:
> Findes der ikke en hurtig måde at appende en fil ind i bunden af en
> anden fil?

Hvad med:

Dim fh As Integer
fh = FreeFile
Open "min.fil" For Append As fh
Print #fh, "Ny linie"
Close fh

-------
Tomas


Morten Nissen (25-01-2004)
Kommentar
Fra : Morten Nissen


Dato : 25-01-04 18:20

On Sun, 25 Jan 2004 00:41:18 +0100, "Tomas Christiansen"
<toc-01-nospam@blikroer.dk> wrote:


>Hvad med:
>
> Dim fh As Integer
> fh = FreeFile
> Open "min.fil" For Append As fh
> Print #fh, "Ny linie"
> Close fh

Den kender jeg også godt, men der er ingen af de metoder der når
copy file1+file2 file3 til sokkeholderne.

Jeg er med på at jeg kan lave en shell, men det er ikke kønt, findes
der ikke et API eller noget i den dur?.

../Morten


Tomas Christiansen (25-01-2004)
Kommentar
Fra : Tomas Christiansen


Dato : 25-01-04 21:26

Morten Nissen skrev:
> Den kender jeg også godt, men der er ingen af de metoder der når
> copy file1+file2 file3 til sokkeholderne.

Hvad mener du med "når til sokkeholderne"?
Med den metode, som jeg angiver, tilføjer du rent faktisk til filen uden at
kopie/genskrive det oprindelige indhold. Hvordan skulle du kunne gøre noget
andet som skulle kunne gå hurtigere???

Forklar venligst og send gerne en kodesnip, som du mener kan gøre det
hurtigere!

-------
Tomas


mwn (26-01-2004)
Kommentar
Fra : mwn


Dato : 26-01-04 09:28


>Forklar venligst og send gerne en kodesnip, som du mener kan gøre det
>hurtigere!
>

Hvis jeg havde det ville jeg ikke skrive her.

Om man bruger FSO eller den gamle måde er ligegyldig, de er ikke så
hurtige som at kopiere dem sammen i en cmd commando(copy fil1+fil2
fil3)

../Morten


Tomas Christiansen (26-01-2004)
Kommentar
Fra : Tomas Christiansen


Dato : 26-01-04 10:54

mwn skrev:
> Om man bruger FSO eller den gamle måde er ligegyldig, de er ikke så
> hurtige som at kopiere dem sammen i en cmd commando(copy fil1+fil2
> fil3)

Hvordan har du testet det? (hvilke data/hvor store filer/datamedie)

-------
Tomas


Tomas Christiansen (26-01-2004)
Kommentar
Fra : Tomas Christiansen


Dato : 26-01-04 12:44

Jeg skrev.
> Hvordan har du testet det? (hvilke data/hvor store filer/datamedie)

Måske jeg lige skulle uddybe.

Din påstand virker umiddelbart for mig lige så usandsynlig som at disketter
skulle være hurtigere end harddiske, men der må jo være en fornuftig grund
til dine erfaringer.

Derfor vil det være rigtig smart, hvis du publicerer den VB-kode, som du
bruger, samt en datafil (kan f.eks. lægges i dk.binaer) eller f.eks. en
lille kodestump, som kan generere en datafil.

Jeg vil meget gerne teste og kommentere din kode (og det er der sikkert
andre, som også gerne vil).

-------
Tomas


mwn (26-01-2004)
Kommentar
Fra : mwn


Dato : 26-01-04 13:50

On Mon, 26 Jan 2004 12:43:52 +0100, "Tomas Christiansen"
<toc-01-nospam@blikroer.dk> wrote:

>
>Derfor vil det være rigtig smart, hvis du publicerer den VB-kode, som du
>bruger, samt en datafil (kan f.eks. lægges i dk.binaer) eller f.eks. en
>lille kodestump, som kan generere en datafil.

Public Sub addToArcive(byval file As String)
Dim textin As TextStream
Dim textout As TextStream


If fso.FileExists(fileName) Then
Set textout = fso.OpenTextFile(fileName, ForAppending, False)

Else
Set textout = fso.OpenTextFile(fileName, ForWriting, True)
End If

Set textin = fso.OpenTextFile(file, ForReading, False)

textout.Write textin.ReadAll

textout.Close
textin.Close

End Sub

>Jeg vil meget gerne teste og kommentere din kode (og det er der sikkert
>andre, som også gerne vil).

Du er velkommen!



Tomas Christiansen (26-01-2004)
Kommentar
Fra : Tomas Christiansen


Dato : 26-01-04 23:20

mwn skrev:
> textout.Write textin.ReadAll

Ja, når jeg prøver din kode af, så kan jeg godt forstå at det tager lang
tid!!!

Du får Scripting Runtime DLL'en til at læse filen txtin linie for linie, for
derefter at skrive dette (formentlig også linie for linie) i filen txtout.
Det vil naturligvis tage lang tid.

Hvis du implementerer det samme ved brug af "Open <fil> For Append As
<handle>", altså læser linie for linie, så vil det naturligvis også tage
lang tid.

En performance-mæssigt bedre måde at håndtere sagen på, er ved blot at
betragte de to filer som to store "klumper" af data (vi er ligeglade med
indholdet), og den ene "klump" skal blot skrives ned i halen på den første
klump.

Så kan de se således ud, og gå rigtig, rigtig hurtigt:

Sub Add2()
Dim FileIn As Integer
Dim FileOut As Integer
Dim Buffer() As Byte

FileIn = FreeFile
Open File2 For Binary As FileIn
ReDim Buffer(1 To LOF(FileIn))
Get #FileIn, , Buffer
Close FileIn

FileOut = FreeFile
Open File1 For Binary As FileOut
Put #FileOut, LOF(FileOut), Buffer
Close FileOut
End Sub

-------
Tomas


Tomas Christiansen (04-02-2004)
Kommentar
Fra : Tomas Christiansen


Dato : 04-02-04 22:45

Tomas Christiansen skrev:
> Så kan de se således ud, og gå rigtig, rigtig hurtigt:
>
> Sub Add2()
....

Der blev helt stille i den anden ende - gad vide om Morten fik det til at
virke???

-------
Tomas


Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408921
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste