Ordner und Unterordner
-
Hi...habe mir mal das Tut hier angeguckt:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-39396.htmlIch wollte mein Laufwerk C:\ nach bestimmten daten durchsuchen
Also ich bin so weit das er mir alles in C:\ einliest und nur datein vom typ exe ausgibt.
So da kriechen mir jetzt 3 Fragen hoch:
1.Was wäre besser....Sobald ein Ordner gefunden gleich den Durchsuchen
oder
Sobald alle ordner gefunden den ersten durchsuchen...immer tiefer etc2.Wie komme ich nun dazu das er auch Unterordner von C:\ liest und deren Unterordner und so....
3.Und zu guter letzt...wie kann ich feststellen das er komplett durch ist?
Wäre nett wenn mir jemand da helfen könnte...habe grade ka wie ich das anstellen soll
MfG
EDIT:
*GELÖSCHT*.....menschliches Versagen^^
-
@1: Im Endeffekt dürfte beides gleich lange dauern - versuch' doch mal im Praxistest die Geschwindigkeit zu vergleichen.
@2: Rekursiv wieder deine Suchfunktion mit dem neuen Namen aufrufen, wenn du ein Unterverzeichnis entdeckt hast (FILE_ATTRIBUTE_DIRECTORY). Pass aber auf, daß du die Verzeichnisse "." und ".." gesondert abfangen mußt, sonst rennst du in eine Endlosrekursion.
@3: FindNextFile() gibt false zurück, wenn du die letzte Datei des Verzeichnisses bearbeitet hast. (deshalb steht's in deinem Tutorial auch als Abbruchbedingung)
-
Black Hell schrieb:
1.Was wäre besser....Sobald ein Ordner gefunden gleich den Durchsuchen
oder
Sobald alle ordner gefunden den ersten durchsuchen...immer tiefer etcIch würde immer zuerst eine Ebene komplett durchgehen, bevor ich zur nächsten gehen. Vermutlich ist es sogar etwas schneller, da der Cach hier optimialer verwendet wird (also die Daten die schon da sind werden zuerst gelesen und nicht erst viel später wieder angefordert)...
Black Hell schrieb:
2.Wie komme ich nun dazu das er auch Unterordner von C:\ liest und deren Unterordner und so....
Neben den Anmerkungen von CStoll solltest Du auch noch Reparse-Points/Junctions erkennen und diese nicht durchsuchen, sonst landest Du auch in einer Endlosschleife (siehe aktuelle c´t
)
Black Hell schrieb:
3.Und zu guter letzt...wie kann ich feststellen das er komplett durch ist?
Wäre nett wenn mir jemand da helfen könnte...habe grade ka wie ich das anstellen soll
Indem Du fertig bist!? Es sei aber angemerkt, dass Du zu einigen Ordnern keine Berechtigung hast...
-
Ich glaube ich habe das alles schon voll versaut...
Was meinst du mit Rekursiv???Könntest du mir ein kleines Beispiel geben?
Also ich bin jetzt soweit:
C:\ einlesen...
- Die Ordner Speichern(dazu packen) in Dir.txt :
c:\Ordner\* ...
-Die Datein Speichert in files.txt:
c:\File.exe ...
wenn er alle Files von C hat hört er auf...
ich will das er sich dann den Ersten Ordner aus dir.txt nimmt und dann das selbe tut....also die gefundenen Sachen den listen hinzufügt.
hat er das...nimmt er den 2. Ordner aus der Liste usw...Ich dachte mir, dass er dann aufhört zu lesen wenn das ende der Datei erreicht ist.
Ich weiß nicht, hätte mal letzte nacht schlafen gehn solln^^...dann wäre das vielleicht etwas einfacher.
EDIT:
Was passiert eigentlich wenn ein Ordner abgefragt wird auf den man nicht zugreifen darf...wird einfach übersprungen oder geht alles zu bruch?EDIT:
Ich glaube ich habe schonmal einen Fehler gefunden...ich habe >> genutzt um einzulesen statt getline();jetzt macht er es schonmal in bissl weiter....
würde mich aber trotzdem über beispiele Freuen oder jegliche anmerkung
-
Black Hell schrieb:
Ich glaube ich habe das alles schon voll versaut...
Was meinst du mit Rekursiv???Könntest du mir ein kleines Beispiel geben?
Also ich bin jetzt soweit:
C:\ einlesen...
- Die Ordner Speichern(dazu packen) in Dir.txt :
c:\Ordner\* ...
Hier könntest du, statt nur den Namen zu speichern, die Funktion mit dem Namen des Unterordners neu aufrufen.
-
Das Problem ist ja das ich den NAmen des Unterordners nicht bekomme...dieeinzigen namen die ich bekomme sind die von C:\....hat er C durch ist ende...
habe folgendes versucht:
do { do { //..... //..... // gfundenes speichern //..... //..... }while (FindNextFile(fHandle,&wfd));//Hier durchsucht er erstmal C:\ FindClose(fHandle); getline(Lesen, NewDir);//Holt nächstes Verzeichnis Path = NewDir;//SICHERHEIT ^^ fHandle=FindFirstFile(Path.c_str(),&wfd);/*Da ich einen Pfad Setzte müsste er weitermachen....tut er aber nicht... und wenn er es mal tut dann macht er es nur kurz und kackt ab...sprich ne Fehlermeldung kommt.*\ }while (FindNextFile(fHandle,&wfd));
Hier die Fehlermeldung:
This application has requested the Runtime to terminate it in an unusual way. Please contact the application's support team for more information.
und außerdem macht er mal was und mal macht er garnichts...ich würde sagen ich habe total falsch angefangen
-
Black Hell schrieb:
Das Problem ist ja das ich den NAmen des Unterordners nicht bekomme...dieeinzigen namen die ich bekomme sind die von C:\....hat er C durch ist ende...
Woher hast du denn die Ordnernamen, die du in "dir.txt" sammelst? Das sind die Unterverzeichnisse von C:\ - und wenn du auf diese FindFirstFile()/FindNextFile() ansetzt, bekommst du den Inhalt der entsprechenden Verzeichnisse.
-
Achso ja kla...sorry bin heute wohl nicht ganz da
Das Habe ich ...das jetztige Problem ist....er liest schon daten ein, aber irgendwann stop er mit der Fehlermeldung(in der Konsole):
This application has requested the Runtime to terminate it in an unusual way. Please contact the application's support team for more information.
er sammelt mir schon viele exe datein, und wenn ich mir die Ordner so ansehe:
c:\WINDOWS\SoftwareDistribution\Download\ef4e5a75cfdde365d30d2b8e413faf3b\* c:\WINDOWS\SoftwareDistribution\Download\f278276eaf51fc6a0cc5d2be92321e9e\* c:\WINDOWS\SoftwareDistribution\Download\f749253cb029933595e48ac6a6bbbaa2\* c:\WINDOWS\SoftwareDistribution\Download\fbdd619a8222bde71c64a77aa485cb23\*
Das Hier ist der Letzte Ordner den er SPeichert:
c:\WINDOWS\system32\CatRoot\{F750E6C3-38EE-11D1-85E5-00C04FC295EE}\*
hängt das irgendwie mit zugriffrechjten zusammen oder so?