Bug in FindNextFile()?
-
void FindRekursiv(path) { if (FindFirstFile(path+"*.*")) { do { print(path+name); if (dir) FindRekursiv(path+dirname); } while(FindNextFile()); } }
-
"*.*" <- nicht alle Dateien/Ordner haben nen Punkt! Nur "*" kommt evtl. besser

-
Dennis123 schrieb:
Bei der Durchsuchung von Ordnern ist das eigentlich egal, da das erste Ergebnis immer "." ist.
Stimmt nicht: Das Wurzelverzeichnis [einer Partition] ist ohne "." und "..".
"." bedeutet das aktuelle Verzeichnis, im ".."-Eintrag ist die Clusternummer des übergeordneten Verzeichnisses eingetragen.
Beispiel: cd . / cd .. / copy ..\..\src\schweineimweltall.txt
"*.*" <- nicht alle Dateien/Ordner haben nen Punkt! Nur "*" kommt evtl. besser

Ich habs eben ausprobiert, funktionieren tut beides "" und ".*"
-
Ich hab das eben nur mit * gemeint, da es ja um das allgemeine durchsuchen von ordnern mitsamt unterordner geht.
-
Oh und da is mir noch was aufgefallen: Deine ChangePath/SavePath... kopiererei ist auch nicht gerade sparsam(könnte vielleicht bei größeren ordneransammlungen wichtig sein).
-
Klarer Fall schrieb:
Debuggen.
Naja, dass ist ja ein Klasse Spruch, wenn die Funktion doch bei .txt Dateien einwandfrei funktioniert.
Also der Ordnerpfad ist mit einem '*' am Ende (wird in der Funktion ChangePath() durchgeführt).
Dass bestimmte Order mit einem '.' beginnen und diese dann zu vernachlässigen sind habe ich hier aus den FAQ@Gast++: Wie meinst du das genau? Wenn die erste Datei mit einem '.' beginnt sollte diese doch nicht gefunden werden (bzw. hab den Teil des Codes fast eins zu eins aus den FAQ)
@Dennis123: Ja stimmt, kann man eleganter machen ich weiss - wollt nur erstmal die Funktion so hinbekommen, dass alles funktioniert und dann die Feinabstimmung machen
-
Nunja wenn du auf 80ns pro duchgang verzichten kannst(Dateisystemvorgänge dauern ms).
-
Ich würde wetten, dass du es mit debuggen schon längst rausgefunden hättest. Du musst natürlich den Fall debuggen bei dem es nicht geht.

-
Also meine Funktion hier, hat mir immer beste Dienste erwisen: http://www.c-plusplus.net/forum/viewtopic-var-t-is-168044-and-highlight-is-*rekursiv*.html
.
-
Pille456 schrieb:
Klarer Fall schrieb:
Debuggen.
Naja, dass ist ja ein Klasse Spruch, wenn die Funktion doch bei .txt Dateien einwandfrei funktioniert.
Aber es stimmt.
Analogieschlüsse beseitigen meist weniger Bugs als systematisches Debugging.
Geh erstmal davon aus, dass in Deinem (neuen) Code der Fehler steckt und nicht in einer Lib die schon zigtausendaml verwandt wurde.Pille456 schrieb:
@Gast++: Wie meinst du das genau? Wenn die erste Datei mit einem '.' beginnt sollte diese doch nicht gefunden werden (bzw. hab den Teil des Codes fast eins zu eins aus den FAQ)
Was wenn die erste Datei mal nicht mir einem "." beginnt?
=> Zumnidest eine Testausschrift an der Stelle!Grüsse
*this
-
Also eine Datei/Ordner kann nicht mit einem Punkt bei Windows beginnen, daher ist das egal

Hab den Code nun auch sowet, dass er einwandfrei Funktioniert, jedoch stoße ich wieder auf eine Unregelmäßigkeit.
Wenn ich die komplette Platte D:\ untersuche bekomm ich weniger Order/Dateien angezeigt als vorhanden, wenn ich jedoch die ersten Ordner auf der Festplatte einzeln anwähle (also D:\Ordner) dann bekomme ich die korrekte Anzahl.
Woran kann das liegen?
Liegt das an Windows, also das einige Dateien/Ordner geschütz sind wie z.B. der Ordner "System Volume Information" und mein Programm auf diese dann keinen Zugriff hat, die Windows Funktion dann jedoch?
Komisch wäre dann nur, warum das auf der 2ten Festplatte (D ist bei mir keine Systemfestplatte (hab dafür C)) so ist. Auf der Systemplatte kann ich mir das ja noch gut vorstellen, da dort auch viele Dateien aktiv offen sind, aber warum auf der reinen Speicherfestplatte?
Oder liegts doch an meinem Programm?
Hab schon überlegt ob die Variablen zu klein sind, aber ich nutz unsigend ints und auf der Festplatte sind nicht mehr als 40.000 Dateien
-
Pille456 schrieb:
Also eine Datei/Ordner kann nicht mit einem Punkt bei Windows beginnen, daher ist das egal

Doch, über die Kommandozeile kann man eine Datei z.B. auch ".htaccess" nennen. Es geht allerdings nicht direkt mittels Explorer, das stimmt

-
Hmm ok, stimmt, aber wie soll ich denn diese (speziellen) Serverdateien miteinbinden?
Sind die vielleicht auch meine Problemquelle?:D
-
Pille456 schrieb:
Hmm ok, stimmt, aber wie soll ich denn diese (speziellen) Serverdateien miteinbinden?
Sind die vielleicht auch meine Problemquelle?:Dund .cvspass und .cvsignore und ggf .CVS ...
Debug das doch mal!
Oder mach zumindst Testausschriften mit Einrüchungen entsprechend der Rekursionstiefe.Grüsse
*this
-
Ersetze mal das While duch ein do..While, dann könnte es funzen,