Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
QBMan
Anmeldungsdatum: 01.12.2004 Beiträge: 6
|
Verfasst am: 02.12.2004, 17:40 Titel: Binärzugriff lahm? (Open datei$ for binary...) |
|
|
Hi,
naja bin noch an meinem Tool und hab festgestellt das Binär voll lahm is.
Kann man da nix machen? Liegts an XP? Also hab NTFS vielleicht deswegen. Alternativen?
MfG QBMan |
|
Nach oben |
|
|
Sebastian Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
|
QBMan
Anmeldungsdatum: 01.12.2004 Beiträge: 6
|
Verfasst am: 02.12.2004, 17:57 Titel: |
|
|
Mhh recht flott? Dachte ich auch immer. Wenn ich print # nehme geht es so schnell das man es nicht sieht. Aber bei binary isses komischerweise anders. Aber ich benötige ES, denn ich will datein verschlüsseln :\
Was meinst du mit Read access und write access? Was ist das ?
MfG QBMan |
|
Nach oben |
|
|
Sebastian Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 02.12.2004, 18:17 Titel: BINARY Modi |
|
|
Hallo.
QBMan hat Folgendes geschrieben: | Was meinst du mit Read access und write access? Was ist das ? |
Mit BINARY ACCESS READ kannst du nur lesen und mit ACCESS WRITE nur schreiben. Also quasi binärer INPUT und OUTPUT.
Natürlich sollte man nicht immer Byte für Byte einlesen, sondern vielleicht immer gleich 2KB oder so in der Art.
Poste doch mal deinen Code, mit dem das so lange dauert. Vielleicht kann man da dran erkennen, wieso das so lahm ist.
Viele Grüße!
Sebastian _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
|
Paul aka ICC, HV-Freak
Anmeldungsdatum: 11.09.2004 Beiträge: 588 Wohnort: Uelzen
|
Verfasst am: 02.12.2004, 18:30 Titel: |
|
|
Diese Art von Dateneinlesen ist nun wirklich extrem schnell:
Code: |
OPEN FileName$ FOR BINARY AS #1
bn& = LOF(1)
maxbuf& = 2048 'Buffergröße
DO
IF bn& > maxbuf& THEN buf& = maxbuf& ELSE buf& = bn&
bn& = bn& - buf&
buffer$ = SPACE$(buf&)
GET #1, , buffer$
DEF SEG = VARSEG(buf&)
s& = SADD(buffer$) - 1
FOR p& = 1 TO buf&
byte = PEEK(s + p&)
'Byte enthält jetzt das p&'nte Byte aus Buffer$ (schneller als MID$)
NEXT p&
DEF SEG
LOOP WHILE bn&
CLOSE #1
|
Nicht getestet, müsste aber einwandfrei laufen _________________
|
|
Nach oben |
|
|
QBMan
Anmeldungsdatum: 01.12.2004 Beiträge: 6
|
Verfasst am: 02.12.2004, 18:40 Titel: |
|
|
Code: |
SUB createbackup (datei$)
'Hier wird die Datei ge”ffnet und kopiert!
OPEN datei$ FOR BINARY AS #4
OPEN "backup.txt" FOR BINARY AS #5
cnt = 1
WHILE NOT EOF(4)
'Inhalt byteweise auslesen und in die Backupdatei schreiben
GET #4, cnt, ts
PUT #5, cnt, ts
WEND
'Dateien werden wieder geschlossen
CLOSE #4
CLOSE #5
END SUB
|
So :> |
|
Nach oben |
|
|
Paul aka ICC, HV-Freak
Anmeldungsdatum: 11.09.2004 Beiträge: 588 Wohnort: Uelzen
|
Verfasst am: 02.12.2004, 19:12 Titel: |
|
|
Also doch wie Sebastian vermutet hat...byteweise....vieeel zu lahm !
Nimm das Obere Codebeispiel, da nimmst du die FOR-NEXT-Schleife ganz raus und schreibst stattdessen
Die Ausgangsdatei muss dann natürlich noch mit OPEN ... FOR BINARY AS #2 geöffnet werden. _________________
|
|
Nach oben |
|
|
QBMan
Anmeldungsdatum: 01.12.2004 Beiträge: 6
|
Verfasst am: 02.12.2004, 20:02 Titel: |
|
|
Hey thx! Geht definitiv schneller. |
|
Nach oben |
|
|
Paul aka ICC, HV-Freak
Anmeldungsdatum: 11.09.2004 Beiträge: 588 Wohnort: Uelzen
|
Verfasst am: 02.12.2004, 20:20 Titel: |
|
|
Das ist schön zu hören !!
Du kannst natürlich noch die Variable maxbuf& größer machen, bis 32676 oder so...dann wirds super-schnell
Achja wie gesagt, dass kann alles gelöscht werden wenn du die 2 Dateien nur kopieren willst:
Code: | DEF SEG = VARSEG(buf&)
s& = SADD(buffer$) - 1
FOR p& = 1 TO buf&
byte = PEEK(s + p&)
'Byte enthält jetzt das p&'nte Byte aus Buffer$ (schneller als MID$)
NEXT p&
DEF SEG |
Und wenn du willst, dass die Ausgangsdatei vor dem Kopieren gelöscht wird , schreibst du einfach vor das 1. Öffnen der Datei
Code: |
OPEN Ausgangsdatei$ FOR OUTPUT AS #2: CLOSE #2
|
_________________
|
|
Nach oben |
|
|
|