Toon posts:

[DOS] Hardeschrijf info opvragen....

Pagina: 1
Acties:
  • 120 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Nouja, ik kan redelijk goed met DOS overweg(zie nick ;) ), maar loop nou opeens tegen een probleem op.

Ik ben bezig met een programmatje te maken(QuickBasic 4.5), dit moet kijken hoeveel schijfruimte je vrij hebt op een drive, en hoeveel totaal beschikbaar is. Maar ik krijg dit nergens gevonden in dos(6.20)

Als dit niet mogelijk is met QuickBasic, is er dan een progje dat het op het scherm laat zien? zodat ik dit naar een file kan schrijven en weer kan inlezen.

  • bramseltje
  • Registratie: September 2001
  • Laatst online: 08-04 12:01
Als je met dir in een lege directory gaat staan krijg je niet zoveel regeltjes, en op de laatste regels staat dan toch info over vrije en gebruikte ruimte?

iets van dir > dir.txt dacht ik, maar weet t niet zeker meer, is al poosje le'en...

Edit:

code:
1
2
3
4
5
...
07-11-2002  15:38    <DIR>          System
05-01-2000  12:31    <DIR>          WINDOWS
               6 File(s)          2.196 bytes
              11 Dir(s)  12.623.695.872 bytes free <---- Die regel dus :)

[ Voor 35% gewijzigd door bramseltje op 04-01-2003 20:52 ]


Verwijderd

Topicstarter
Bramseltje schreef op 04 January 2003 @ 20:50:
Als je met dir in een lege directory gaat staan krijg je niet zoveel regeltjes, en op de laatste regels staat dan toch info over vrije en gebruikte ruimte?

iets van dir > dir.txt dacht ik, maar weet t niet zeker meer, is al poosje le'en...

Edit:

code:
1
2
3
4
5
...
07-11-2002  15:38    <DIR>          System
05-01-2000  12:31    <DIR>          WINDOWS
               6 File(s)          2.196 bytes
              11 Dir(s)  12.623.695.872 bytes free <---- Die regel dus :)
ja dit weet ik, maar herbij staat niet hoeveel er totaal is :+

  • bramseltje
  • Registratie: September 2001
  • Laatst online: 08-04 12:01
Oew, ehm, in je root gaan staan, en dan dir /a /s doen, en dan de 1 na laatste regel nemen :D Wel tijdje bezig btw als je volle of trage schijf hebt :9

edit:

grr, blijf aant editten :D

code:
1
2
3
4
5
6
7
14-01-2002  19:18                20 INFO2
14-01-2002  19:18                65 desktop.ini
               2 File(s)             85 bytes

     Total Files Listed:
           11274 File(s)  1.203.805.059 bytes     <--- Die dus
             846 Dir(s)   5.195.845.632 bytes free

en dan optellen ofzo :)
Zo dan?

[ Voor 58% gewijzigd door bramseltje op 04-01-2003 20:58 ]


Verwijderd

set dir=c:\mapje
set log=dir.%dir%.txt
dir %dir% /s >%log%

Wordt tenminste niet iedere keer je log overschreven.

Je kan t ook wat flexibeler maken.

copy con dirsize.bat (Enter)

dir %1 /s >>log.%1.txt (gevolgd door F6)

Als je nu dirsize mapnaam intikt wordt mapnaam als input gebruikt voor dirsize.bat Tik bij mapnaam wel het volledige pad, anders doet ie t niet.

[ Voor 12% gewijzigd door Verwijderd op 04-01-2003 21:00 ]


Verwijderd

Misschien met het doscommando: chkdsk > c:\chkdsk.log
en dan chkdsk.log uitlezen?

  • odysseus
  • Registratie: Augustus 2000
  • Laatst online: 14-05 20:19

odysseus

Debian GNU/Linux Sid

Als je het moeilijk wilt maken dan kun je uit de bootsector (om precies te zijn uit de BPB) informatie halen om te berekenen hoeveel ruimte er is: daarin staat namelijk vermeld hoeveel bytes er per sector zijn en hoeveel sectors er zijn (dat laatste staat eigenlijk net buiten de BPB en werd onder DOS 3.2 nog niet gebruikt...geen idee hoe het met DOS 6.2 is). In mijn Programmers Reference van MS-DOS/GW-BASIC 3.2 staat voor zover ik kan vinden geen andere manier. Je kunt met functie 44, code 0DH, CL=40H bij de hardware-informatie komen. Daar heb je een word voor het aantal cylinders en een berg words die de layout van elke sector aangeven. Als je het wilt gebruiken dan zul je wel met assembler aan de slag moeten lijkt het :7.

* odysseus denkt dat er in DOS 6.2 wel iets zit dat het makkelijker maakt :).

Leven is het meervoud van lef | In order to make an apple pie from scratch, you must first create the universe.


Verwijderd

Topicstarter
Bramseltje schreef op 04 januari 2003 @ 20:55:
Oew, ehm, in je root gaan staan, en dan dir /a /s doen, en dan de 1 na laatste regel nemen :D Wel tijdje bezig btw als je volle of trage schijf hebt :9

edit:
grr, blijf aant editten :D

code:
1
2
3
4
5
6
7
14-01-2002  19:18                20 INFO2
14-01-2002  19:18                65 desktop.ini
               2 File(s)             85 bytes

     Total Files Listed:
           11274 File(s)  1.203.805.059 bytes     <--- Die dus
             846 Dir(s)   5.195.845.632 bytes free

en dan optellen ofzo :)
Zo dan?
Het klopt wel.
code:
1
2
3
Totaal aantal bestanden:
        998 bestand(en)    52.886.703 bytes
                           24.655.872 bytes beschikbaar

is een 386 Laptop, dus begin niet over die 120MB HDD die er in zit(2 partieties)

Weet je hoe lang dit duurt? Leuke intro voor me progje joh :z
Verwijderd schreef op 04 January 2003 @ 20:58:
set dir=c:\mapje
set log=dir.%dir%.txt
dir %dir% /s >%log%

Wordt tenminste niet iedere keer je log overschreven.

Je kan t ook wat flexibeler maken.

copy con dirsize.bat (Enter)

dir %1 /s >>log.%1.txt (gevolgd door F6)

Als je nu dirsize mapnaam intikt wordt mapnaam als input gebruikt voor dirsize.bat Tik bij mapnaam wel het volledige pad, anders doet ie t niet.
Umz, zoals ik al zij, ik zit in QuickBasic
ik kan ALLES(veel teminste) met QuickBasic
code:
1
2
3
4
5
6
7
8
9
SHELL "dir >> "+Drv$+":\tmp1.tmp"
OPEN Drv$+":\tmp1.tmp" FOR INPUT AS #1
  tel% = 0
  DO
    LINE INPUT #1, info$(tel%)
    tel% = tel% +1
  LOOP UNTIL EOF(1)
CLOSE #1
KILL Drv$+":\tmp1.tmp"

op deze manier kan ik ALLES opvragen in QuickBasic wat je met DOS kan doen :)
Verwijderd schreef op 04 January 2003 @ 21:14:
Misschien met het doscommando: chkdsk > c:\chkdsk.log
en dan chkdsk.log uitlezen?
In DOS 6.2 en lager werkt CHKDSK nog als echte checkprogramma en wil hij dus ook echt checken, dat duurt best wel lang :+
odysseus schreef op 04 January 2003 @ 23:19:
Als je het moeilijk wilt maken dan kun je uit de bootsector (om precies te zijn uit de BPB) informatie halen om te berekenen hoeveel ruimte er is: daarin staat namelijk vermeld hoeveel bytes er per sector zijn en hoeveel sectors er zijn (dat laatste staat eigenlijk net buiten de BPB en werd onder DOS 3.2 nog niet gebruikt...geen idee hoe het met DOS 6.2 is). In mijn Programmers Reference van MS-DOS/GW-BASIC 3.2 staat voor zover ik kan vinden geen andere manier. Je kunt met functie 44, code 0DH, CL=40H bij de hardware-informatie komen. Daar heb je een word voor het aantal cylinders en een berg words die de layout van elke sector aangeven. Als je het wilt gebruiken dan zul je wel met assembler aan de slag moeten lijkt het :7.

* odysseus denkt dat er in DOS 6.2 wel iets zit dat het makkelijker maakt :).
Ow vet, dit wist ik nog niet, maarja hellaas ken ik geen assambler.

Andere opties beschikbaar die _wel_ werken(ergens een diskinfoprogje oid) :+

  • Apache
  • Registratie: Juli 2000
  • Laatst online: 08-05 09:28

Apache

amateur software devver

Ok, ik heb erg beperkte asm kennis :o

wat odysseus zegt komt neer op dit denk ik

code:
1
2
3
4
5
mov dl,0Dh
mov cl,40h
int 21h
mov ah,2Ch ; 2Ch = 44 dec
int 21h


:P

moet je het nog wel aan de info kunnen komen, dus ik weet niet meteen waar het eerste geheugenadress geplaatst zal worden, zodra je dat hebt kan je ook nog gaan afdrukken wat je hebt :)

Als het echt erg belangrijk is kan je zelf ff compileren met nasm, en dan kijken met debug welk register hij veranderd na de 5de stap, dan zie je een van de registers veranderen naar de juiste waarde in het geheugen.

If it ain't broken it doesn't have enough features


  • Krypt
  • Registratie: April 2000
  • Laatst online: 12-05 21:10
odysseus schreef op 04 January 2003 @ 23:19:
Je kunt met functie 44, code 0DH, CL=40H bij de hardware-informatie komen. Daar heb je een word voor het aantal cylinders en een berg words die de layout van elke sector aangeven. Als je het wilt gebruiken dan zul je wel met assembler aan de slag moeten lijkt het :7.

* odysseus denkt dat er in DOS 6.2 wel iets zit dat het makkelijker maakt :).
Met een Call Interrupt moet het werken in QB4.5. (moet je wel een obj laden), dus asm heb je niet echt nodig..
Dacht zelf dat het functie 21Hex was....maar kan me vergissen..

Ff zoeken..

[edit]
Quickbasic 4.5 laden met QB/L dan wordt de QB.QLB geladen die interrupt calls kan uitvoeren..

[edit2]
Gelijk maar even wat code om de schijfruimte uit te lezen... verdiep je in de wereld die interrupt heet en bouw heel PcTools na, incl "grafische mode" in textmode; heb ik heel wat uurtjes in gestopt :)

Ik zou het niet met shells gaan doen, is niet netjes en foutafhandeling heb je bijna niet en vooral: Het is traag! (maarja; dat maakt tegenwoordig ook niets meer uit)

DECLARE FUNCTION freediskspace& (dr$)

DEFINT A-Z
CONST true = -1, false = 0

$INCLUDE: 'qbx.bi'

DEFSNG A-Z
FUNCTION freediskspace& (dr$)

' Returns free disk space on drive dr$


'Define registers.
DIM regs AS RegType

Curd$ = CURDIR$
CHDRIVE dr$

'Get current drive info; set up input and do system call.
regs.ax = &H1900
CALL Interrupt(&H21, regs, regs)

'Convert drive info to readable form.
Drive$ = CHR$((regs.ax AND &HFF) + 65) + ":"

'Get disk free space; set up input values and do system call.
regs.ax = &H3600
regs.dx = ASC(UCASE$(Drive$)) - 64
CALL Interrupt(&H21, regs, regs)

'Decipher the results.
SectorsInCluster = regs.ax
BytesInSector = regs.cx
IF regs.dx >= 0 THEN
ClustersInDrive = regs.dx
ELSE
ClustersInDrive = regs.dx + 65536
END IF
IF regs.bx >= 0 THEN
ClustersAvailable = regs.bx
ELSE
ClustersAvailable = regx.bx + 65536
END IF

'CHDRIVE Curd$

freediskspace& = ClustersAvailable * SectorsInCluster * BytesInSector
END FUNCTION

[ Voor 67% gewijzigd door Krypt op 05-01-2003 02:14 ]

Pvouput live


  • Wilke
  • Registratie: December 2000
  • Laatst online: 16:05
Klopt allemaal wat Krypt zegt. Als er geen functie-call in QuickBasic zelf is om dit te doen, moet het zeker met INT21 (de DOS interrupt) kunnen.

Wauw, inclusief code gewoon, spaart mij weer de tijd om op te zoeken hoe dat ook weer precies moest (vroeger ook tijden in DOS zitten prutsen, maar dan vooral in Turbo Pascal en Assembler...wat een nostalgie dit topic!)

Verwijderd

Topicstarter
Krypt schreef op 05 January 2003 @ 02:02:
[...]


Met een Call Interrupt moet het werken in QB4.5. (moet je wel een obj laden), dus asm heb je niet echt nodig..
Dacht zelf dat het functie 21Hex was....maar kan me vergissen..

Ff zoeken..

[edit]
Quickbasic 4.5 laden met QB/L dan wordt de QB.QLB geladen die interrupt calls kan uitvoeren..

[edit2]
.....knip.....
Umz ik voel me opeens QuickBasic n00b :(
Ik gebruik alleen QuickBasic omdat ik kan compilen, maar alleen QBasic kennis.

Hoe laad ik de QB.QLB?

Deze wereld is wel interesant, maar zal _weer_ veel tijd gaan kosten.
Wilke schreef op 05 januari 2003 @ 02:15:
Klopt allemaal wat Krypt zegt. Als er geen functie-call in QuickBasic zelf is om dit te doen, moet het zeker met INT21 (de DOS interrupt) kunnen.

Wauw, inclusief code gewoon, spaart mij weer de tijd om op te zoeken hoe dat ook weer precies moest (vroeger ook tijden in DOS zitten prutsen, maar dan vooral in Turbo Pascal en Assembler...wat een nostalgie dit topic!)
Komop met zn alle in Q(uick)Basic gaan proggen.
Watvoor groepproject zullen we maken? :+

[ Voor 30% gewijzigd door Verwijderd op 05-01-2003 02:32 ]


  • Apache
  • Registratie: Juli 2000
  • Laatst online: 08-05 09:28

Apache

amateur software devver

pffff, doe dan meteen een asm groepsproject :P

If it ain't broken it doesn't have enough features


  • Krypt
  • Registratie: April 2000
  • Laatst online: 12-05 21:10
KingOfDos: Gewoon QB/L dan wordt die Quickbasic Library geladen en kan je met interrupts aan de gang. Dan even de QB.BI includen (zie dat er in de source qbx.bi staat; moet dus qb.bi zijn) zodat je de Regtype kunt defineren.Dit zijn de registers.

En dan aan de gang; zoveel tijd kost dat niet, en als je er nu even tijd in steekt dan kun je hele leuke dingen doen.

Zoek met google op "Interrupts Quickbasic" en je vind best wel wat. En kijk eens in de bieb of ze het boek "New Peter Norton Programmer's Guide to the IBM PC & PS/2" hebben; met dit boek heb ik het meest kunnen doen.

Ik zou best wel weer in QuickBasic willen proggen, maar weet megod niet wat is zou moeten proggen; en meestal bestaan die progsels die ik nodig heb allang.

Pvouput live

Pagina: 1