Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
storky

Anmeldungsdatum: 06.01.2013 Beiträge: 68
|
Verfasst am: 06.01.2013, 20:14 Titel: Consolenzeile lesen |
|
|
Hallo,
wie ist es möglich, eine Zeile aus der Console zu lesen. Öhnlich wie std::cin in c?
Einen iostream header oder etwas equivalentes habe ich nicht gefunden.
Danke. |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
 |
storky

Anmeldungsdatum: 06.01.2013 Beiträge: 68
|
Verfasst am: 06.01.2013, 20:34 Titel: |
|
|
Danke für die Antwort, aber das war nicht ganz meine Idee.
Ich werde mal das Problem als Gesamtpaket schildern, bevor ich haufen kleine uneindeutige Fragen stelle.
Zwar möchte ich einen Dateicrawler bauen, der alle Pfade zu Dateien in einem Ordner und dessen Unterordner usw usw.. durchläuft, bis alles in dem Ordner erfasst wurden ist.
Quasi unter Windows: dir /b/s/w
Bis jetzt hatte ich das so gelöst:
Code: |
Path = COMMAND(2)
Kill "dir.tmp"
Shell ("dir /b/s/w " & Chr(34) & path & Chr(34) & " > dir.tmp")
Print "Generating filelist..."
Dim cFile As String
Open "dir.tmp" For input As #1
DO UNTIL EOF(1)
Line INPUT #1, cFile
If FileLen(cFile) Then
overallSize += FileLen(cFile)
ReDim Preserve files(FileCount)
files(FileCount) = cfile
FileCount +=1
End If
Loop
Close #1 |
Nun ist das Problem, das Programm soll auch mal eine komplette HDD auslesen können. Da wird "dir.tmp" locker mal 100 mb groß und das alles in Arrays aufsplitten nur um jeden array wieder in einer Schlaufe zu verwenden... ist einfach... zu langsam.
Meine neue Idee wäre quasi
while shell("dir c:\")
read line
cls
do loop
^^also shell gibt einmal 1 zurück und dann 0, kann man natürlich nciht stoppen, aber hab mir das schematisch als Pseudocode gedacht.
Also soll das Programm so schnell wie möglich crawlen und am besten den neuen Pfad gleich verwenden.  |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 06.01.2013, 20:37 Titel: |
|
|
storky hat Folgendes geschrieben: | while shell("dir c:\")
read line
cls
do loop |
Ah, okay, sowas geht mit OPEN PIPE. Damit kann man die Konsolenausgabe eines anderen Programms als Stream öffnen und wie eine Datei zeilenweise einlesen.
Nachtrag: Wenn man während des Auslesens einer dir-Ausgabe weitere dir-Ausgaben erfragt und einliest (rekursive Verschachtelung entlang des Verzeichnisbaums), muss man allerdings beachten, dass dabei sehr viele Dateihandles gleichzeitig geöffnet werden müssten. Das heißt, es darf nicht immer schlichtweg "#1" als Dateihandle benutzt werden, sondern jede weitere Schachtelung in die Tiefe braucht ein eigenes Handle (da die Streams ja parallel offen wären). Zur Handle-Anzahl gibt es seitens des Betriebssystems u.U. jedoch ein Limit. _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
 |
storky

Anmeldungsdatum: 06.01.2013 Beiträge: 68
|
Verfasst am: 06.01.2013, 21:05 Titel: |
|
|
Vielen Dank!
Funktioniert wunderbar.
Nein das eine dir reicht
Edit: vorheriger Post war bissel übereilt. |
|
Nach oben |
|
 |
St_W

Anmeldungsdatum: 22.07.2007 Beiträge: 956 Wohnort: Austria
|
Verfasst am: 06.01.2013, 22:48 Titel: |
|
|
storky hat Folgendes geschrieben: | Zwar möchte ich einen Dateicrawler bauen, der alle Pfade zu Dateien in einem Ordner und dessen Unterordner usw usw.. durchläuft, bis alles in dem Ordner erfasst wurden ist. |
Dazu könntest du aber, wie üblich, den DIR-Befehl von FreeBasic verwenden, anstatt den Umweg über ein externes Programm zu gehen. Weitere Vorteile sind die Einsparung einer temporären (womöglich sehr großen) Datei, volle Kontrolle des eigenen Programms während dem "crawlen" und ziemlich sicher auch eine schnellere und ressourcenschonendere Ausführung.
Natürlich muss das rekursive Durchsuchen dann selbst programmiert werden, wobei man allerdings auf bestehenden Code zurückgreifen kann: z.B. von hier, hier oder hier _________________ Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken) |
|
Nach oben |
|
 |
storky

Anmeldungsdatum: 06.01.2013 Beiträge: 68
|
Verfasst am: 07.01.2013, 16:16 Titel: |
|
|
Mit dem dir hatte ich es Anfangs versucht aber nach großer Verwirrung abgebrochen, hatte die Beispiele nicht gefunden :/
Ich denke aber ich belass es mit der Pipe, da angewandt auf ne ganze Festplatte, kein besonderer Leistungsverlust auftritt.
Aber danke, ich merk es mir vor fürs Nächste mal.
Appropos, mein Projekt ist nun soweit fertig. Ist ein Dateiencrypter, der ein/e angebebene/s Verzeichnis/ Datei mit einem Rotierenden Sha1 key in xor verschlüsselt. Der Key kommt durch ein wählbares Passwort zustande natürlich... Teste es gerade auf meiner alten HDD mit ~45mb/s.
Ich such mal ne Sektion wo ich es vorstellen kann. |
|
Nach oben |
|
 |
ThePuppetMaster

Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
|
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 07.01.2013, 17:16 Titel: |
|
|
Es ist zwar nur ein Beispiel, aber... urgh. C:\Windows\Temp\? Was sollen diese hardgecodeten Pfade? Für sowas gibt es ENVIRON("TEMP") in FreeBASIC. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
ThePuppetMaster

Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
|
Verfasst am: 07.01.2013, 17:42 Titel: |
|
|
Damit die leute sehen, das und wie man dort einen Pfad angibt, udn nicht noch erst herausfinden müssen, was "Environ" tut, wen sie das noch nie gesehen haben.
Und, wie du schon geschrieben hast, es is nur ein beispiel. da kann ich alles rein schreiben, was mir gefällt. .. nächste ma schreib ich "foo:/bar/"
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
 |
|