Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Binärzugriff lahm? (Open datei$ for binary...)

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
QBMan



Anmeldungsdatum: 01.12.2004
Beiträge: 6

BeitragVerfasst am: 02.12.2004, 17:40    Titel: Binärzugriff lahm? (Open datei$ for binary...) Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 02.12.2004, 17:51    Titel: BINARY Antworten mit Zitat

Hallo.

Ich würde zu allererst immer zwischen BINARY ACCESS READ und BINARY ACCESS WRITE wählen.
Der binäre Zugriff ist aber an sich recht flott. verwundert Am schnellsten geht natürlich alles mit eingebauten ASM-Programmen oder du benutzt direkt INTERRUPTs, um was mit den Dateien zu machen.

Viele Grüße!
Sebastian
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
QBMan



Anmeldungsdatum: 01.12.2004
Beiträge: 6

BeitragVerfasst am: 02.12.2004, 17:57    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 02.12.2004, 18:17    Titel: BINARY Modi Antworten mit Zitat

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

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Paul
aka ICC, HV-Freak


Anmeldungsdatum: 11.09.2004
Beiträge: 588
Wohnort: Uelzen

BeitragVerfasst am: 02.12.2004, 18:30    Titel: Antworten mit Zitat

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 durchgeknallt
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
QBMan



Anmeldungsdatum: 01.12.2004
Beiträge: 6

BeitragVerfasst am: 02.12.2004, 18:40    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Paul
aka ICC, HV-Freak


Anmeldungsdatum: 11.09.2004
Beiträge: 588
Wohnort: Uelzen

BeitragVerfasst am: 02.12.2004, 19:12    Titel: Antworten mit Zitat

Also doch wie Sebastian vermutet hat...byteweise....vieeel zu lahm ! mit dem Kopf durch die Mauer wollen

Nimm das Obere Codebeispiel, da nimmst du die FOR-NEXT-Schleife ganz raus und schreibst stattdessen
Code:

PUT #2, , buffer$


Die Ausgangsdatei muss dann natürlich noch mit OPEN ... FOR BINARY AS #2 geöffnet werden.
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
QBMan



Anmeldungsdatum: 01.12.2004
Beiträge: 6

BeitragVerfasst am: 02.12.2004, 20:02    Titel: Antworten mit Zitat

Hey thx! Geht definitiv schneller.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Paul
aka ICC, HV-Freak


Anmeldungsdatum: 11.09.2004
Beiträge: 588
Wohnort: Uelzen

BeitragVerfasst am: 02.12.2004, 20:20    Titel: Antworten mit Zitat

grinsen Das ist schön zu hören !! grinsen

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz