|
| 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
| |
|
|