Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
fwilhelm
Anmeldungsdatum: 23.07.2007 Beiträge: 4
|
Verfasst am: 23.07.2007, 20:55 Titel: Ordnergröße ermitteln? |
|
|
Hallo zusammen,
bin leider ein Anfänger was qbasic prog. betrifft. Vielleicht kann mir jemand helfen. und zwar..
Ich habe einen Ordner in dem ich einige Dateien habe. Wie kann ich herausfinden wieviel Speicher KB in diesem Ordner sind.
Bitte helft mir.  |
|
Nach oben |
|
 |
Eternal_pain

Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 23.07.2007, 21:04 Titel: |
|
|
Es gibt bestimmt elegantere loesungen dafuer, aber diese hier ist mit spontan eingefallen...
Code: | Dim S1 as String
open pipe "dir" for input as #1
While not eof(1)
line input #1,S1
If INSTR(S1,"(en)") and INSTR(S1,"Bytes") Then ?S1
Wend
Close #1
sleep
|
_________________
 |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 23.07.2007, 21:14 Titel: |
|
|
Hallo,
wie wär's hiermit?
Code: | CLS
SHELL "DIR>" + ENVIRON$("TEMP") + "\dateien.tmp"
StrBytes$ = ""
OPEN ENVIRON$("TEMP") + "\dateien.tmp" FOR INPUT AS #1
DO UNTIL EOF(1)
LINE INPUT #1, Zeile$
IF LEFT$(Zeile$, 2) = " " THEN
ende% = INSTR(UCASE$(Zeile$), "BYTES")
lx% = 0
FOR i% = 1 TO ende% - 2
IF MID$(Zeile$, i%, 1) = " " THEN lx% = i%
NEXT i%
tmp$ = MID$(Zeile$, lx% + 1, ende% - lx%)
FOR i% = 1 TO LEN(tmp$)
b$ = MID$(tmp$, i%, 1)
IF b$ <> "." AND b$ <> "," THEN
StrBytes$ = StrBytes$ + b$
END IF
NEXT i%
Bytes& = VAL(StrBytes$)
EXIT DO
END IF
LOOP
CLOSE #1
KILL ENVIRON$("TEMP") + "\dateien.tmp"
IF StrBytes$ = "" THEN
PRINT "Fehler. Belegter Speicher konnte nicht ermittelt werden."
ELSE
PRINT "Bytes im Verzeichnis: "; LTRIM$(STR$(Bytes&))
END IF
SLEEP: END |
Viele Grüße!
Sebastian _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Zuletzt bearbeitet von Sebastian am 23.07.2007, 21:29, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
fwilhelm
Anmeldungsdatum: 23.07.2007 Beiträge: 4
|
Verfasst am: 23.07.2007, 21:19 Titel: |
|
|
open pipe "dir" for input as #1 <-- Bei dieser Eingabe habe ich Probleme
Anstatt "dir" habe ich meinen Pfad eingegen "C:\VBDOS"; Leider bekomme ich immer wieder einen Fehler
Was mache ich falsch?  |
|
Nach oben |
|
 |
Eternal_pain

Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 23.07.2007, 21:21 Titel: |
|
|
das ist klar... das Dir muss bleiben... du kannst deinen Pfad aber dahinter schreiben... am besten mit einem String
also open pipe "dir "+Pfad$......
dann sollte es eigentlich gehen... _________________
 |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
 |
fwilhelm
Anmeldungsdatum: 23.07.2007 Beiträge: 4
|
Verfasst am: 23.07.2007, 21:25 Titel: |
|
|
open pipe "dir" +C:\Test$ for input as #1 funktioniert leider auch nicht? |
|
Nach oben |
|
 |
fwilhelm
Anmeldungsdatum: 23.07.2007 Beiträge: 4
|
Verfasst am: 23.07.2007, 21:26 Titel: |
|
|
kann ich eine freebasic anwendung auch unter windows NT4.0 ausführen
Aber kann es sein das bei deinem Code ich die Dateien im Ordner wissen muss.
DieAnzahl ist mir leider unbekannt.
Zuletzt bearbeitet von fwilhelm am 23.07.2007, 21:31, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 23.07.2007, 21:27 Titel: |
|
|
In QB gibts kein PIPE. Das ist neu in FreeBASIC. Eternal_Pains Code ist nur zur Ausführung mit FreeBASIC gedacht. Der Code, den ich oben gepostet hab, ist mit QB 4.5 getestet und funktioniert.
//edit: FreeBASIC Anwendungen laufen auch unter Windows NT4. Ich selbst arbeite damit täglich. Btw, bitte nutze doch die EDIT-Funktion des Forums, um deine Beiträge nachher zu ergänzen.
 _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
 |
Mao
Anmeldungsdatum: 25.09.2005 Beiträge: 4409 Wohnort: /dev/hda1
|
Verfasst am: 23.07.2007, 21:44 Titel: |
|
|
Schau dir zudem lieber nochmal ein Tutorial über QB bzw. FB an, eins mit Grundlagen.
In deinem Versuch den Pfad dahinter zu schreiben hast du QB glauben lassne, es gebe eine Variable namens "C:\Test$". Widerspricht aber den erlaubten Zeichen Variablen, zudem willst du ja den String ansich dazu schreiben.
Code: |
[...] "dir c:\test"[...]
|
Aber wie Sebastian schon sagte, für (Open) Pipe brauchst du FB.
Zudem ist es ratsam, sich alle Antworten in einem Thread, den man selbst geöffnet hat, anzuschauen und die dort beschriebenen Lösungen auszuprobieren. Nicht immer ist die erste Lösung auch die Beste (bzw. Funktionierende). _________________ Eine handvoll Glück reicht nie für zwei.
--
 |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 24.07.2007, 12:02 Titel: |
|
|
@fwilhelm: Nein, das ist nicht nötig. Hier jetzt auch noch mal der Code mit Angabemöglichkeit für ein anderes Verzeichnis:
Code: | CLS
Pfad$ = "C:\PROGS" '<= DOS 8.3 Format beachten!
SHELL "DIR "+Pfad$+">" + ENVIRON$("TEMP") + "\dateien.tmp"
StrBytes$ = ""
OPEN ENVIRON$("TEMP") + "\dateien.tmp" FOR INPUT AS #1
DO UNTIL EOF(1)
LINE INPUT #1, Zeile$
IF LEFT$(Zeile$, 2) = " " THEN
ende% = INSTR(UCASE$(Zeile$), "BYTES")
lx% = 0
FOR i% = 1 TO ende% - 2
IF MID$(Zeile$, i%, 1) = " " THEN lx% = i%
NEXT i%
tmp$ = MID$(Zeile$, lx% + 1, ende% - lx%)
FOR i% = 1 TO LEN(tmp$)
b$ = MID$(tmp$, i%, 1)
IF b$ <> "." AND b$ <> "," THEN
StrBytes$ = StrBytes$ + b$
END IF
NEXT i%
Bytes& = VAL(StrBytes$)
EXIT DO
END IF
LOOP
CLOSE #1
KILL ENVIRON$("TEMP") + "\dateien.tmp"
IF StrBytes$ = "" THEN
PRINT "Fehler. Belegter Speicher konnte nicht ermittelt werden."
ELSE
PRINT "Bytes im Verzeichnis: "; LTRIM$(STR$(Bytes&))
END IF
SLEEP: END |
_________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
 |
|