 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
rifl
Anmeldungsdatum: 05.01.2005 Beiträge: 1 Wohnort: Ebbs, Tirol, Ösis
|
Verfasst am: 05.01.2005, 09:56 Titel: 3 Probleme... [bin neu in qbasic] |
|
|
Erstmal hallo an alle (die das hier lesen)
Ich habe bis jetzt hauptsächlich in Dos programmiert (vor allem Bootfähige CD-Roms) und will jetzt auf Quickbasic Umsteigen... bzw umschreiben:
Da gibt es folgende Probleme:
1.) Ramdrive.sys erzeugt ein Ramdrive - kann ich in Qbasic das auch einfach so machen z.B. so: D:\ramdrive.sys /30000 (größe) /512 /256 /e (typ)
2.) Ich habe bis jetzt nicht herausgefunden wie man Datein von einem Ort zum anderen kopiert z.B
die datei driver.bat von CD ins Ramdrive - wobei beide immer variable Laufwerksbuchstaben haben....
3.) fällt mir nicht mehr ein....
Also erstmal Danke im Voraus,
mfg RiFl |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 05.01.2005, 12:39 Titel: Antworten |
|
|
Hallo.
In QBASIC kannst du ein Ramdrive genauso machen wie in einer Batchdatei.
Allerdings musst du deine Befehle, die man in Batchdateien einfach so hinschreibt, bei QB in den Befehl SHELL "..." einfügen. Mit SHELL kann man quasi auf den DOS-Prompt zugreifen. Doof formuliert, aber hoffentlich verständlich...
Eine Datei lässt sich auf seeehr viele Wege kopieren.
Es geht auch einfach, wenn auch unschön, mit SHELL:
Code: | SHELL "COPY BLA.BAT ..." |
Viel schöner ist es, direkt mit QB zu kopieren.
Eine Batchdatei zum Beispiel so:
Code: | OPEN "A:\QUELLE.BAT" FOR INPUT AS #1
OPEN "C:\ZIEL.BAT" FOR OUTPUT AS #2
DO
LINE INPUT #1, Zeile$
PRINT #2, Zeile$
LOOP UNTIL EOF(1)
CLOSE #1
CLOSE #2 |
Wenn du alle möglichen Dateien kopieren willst, musst du das Ganze binär angehen.
Code: | OPEN "A:\QUELLE.EXE" FOR BINARY ACCESS READ AS #1
OPEN "C:\ZIEL.EXE" FOR BINARY ACCESS WRITE AS #2
EinByte$ = SPACE$(1)
DO
GET #1,,EinByte$
PUT #2,,EinByte$
LOOP UNTIL EOF(1)
CLOSE #1
CLOSE #2 |
Das geht prima, bei JEDER Art von Datei. Allerdings ist es bei großen Dateien recht langsam. Das Programm oben ein bisschen "performter" hier unten:
Code: | PufferSize% = 16384
From$ = "C:\QUELLE.EXE"
To$ = "D:\ZIEL.EXE"
OPEN From$ FOR BINARY ACCESS READ AS #1
OPEN To$ FOR BINARY ACCESS WRITE AS #2
Puffer$ = ""
DO UNTIL LOC(1) = LOF(1)
IF LOF(1) - LOC(1) < Puffersize% THEN
Puffer$ = SPACE$(LOF(1) - LOC(1))
ELSE
Puffer$ = SPACE$(Puffersize%)
END IF
GET #1, , Puffer$
PUT #2, , Puffer$
LOOP
CLOSE #1
CLOSE #2 |
Möglicherweise enthalten die Codes noch Fehlerchen. Sie sind lediglich im Forumeingabedingens geschrieben.
Aber die Funktionsweise sollte deutlich werden.
Viele Grüße!
Sebastian _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 05.01.2005, 20:51 Titel: |
|
|
Die eigene Kopierroutine hat lediglich das Problem, dass die Zieldatei nicht dasselbe Modifikationsdatum erhält. Aber auch dieses Problem lässt sich lösen; siehe
http://forum.qbasic.at/viewtopic.php?t=71
http://beilagen.dreael.ch/QB/DATDEMO.BAS
In diesem Fall besonders einfach: Die Werte aus CX und DX muss man nicht einmal parsern/"zerhacken", sondern gibt sie einfach 1:1 dem INT21h/AX=5701-Systemaufruf weiter.
Übrigens ganz ähnlich kann man es mit den Attributen (Archiviert, System, Hidden, Readonly; DOS-Befehl ATTRIB) auch machen, so dass man perfekt geclonte Kopien erhält. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
|
|
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.
|
|