Ich muss ein Programm machen, wo ich die Dateien in einem bestimmten Verzeichnis indizieren muss. Ich habe den Indizierungsteil heruntergefahren, aber mit dem ich Probleme habe, ist, wie man zu dem Verzeichnis navigiert. Zum Beispiel, sagen wir, wenn ich das Programm starte, werde ich fragen: "Welches Verzeichnis möchten Sie indizieren?" Und dann wäre die Eingabe "usr / Documents / CS / Assignment4", wie komme ich zum Verzeichnis "Assignment4"? Ich weiß, Rekursion ist erforderlich, aber ich bin wirklich verwirrt, wie Verzeichnisse in C arbeiten. Sagen meine Quelldatei ist in "usr / Documents / SourceCode", was soll ich tun, um zu Assignment4 zu kommen?
Ich weiß, ich höre mich an, als ob ich alle Antworten möchte, aber ich bin völlig verloren, wie Verzeichnisse funktionieren, und das Buch, das ich sicke. Selbst wenn du nur einen Link zu einem guten Tutorial hast, wäre das fantastisch.
Ich betreibe Linux, Ubuntu um genau zu sein. GCC ist der Compiler.
Die C-Programmiersprache hat keine Vorstellung von einem Dateisystem. Dies ist stattdessen eine betriebssystemspezifische Frage.
Je nach Art des Verzeichnisses in Ihrer Frage klingt es nach einem Unix / Linux-System. Wenn das der Fall ist, suchen Sie nach der Funktion opendir
Das rekursive Durchsuchen eines Verzeichnisses in C erfolgt in etwa wie folgt:
Verwenden Sie opendir
und readdir
, um die Verzeichniseinträge aufzulisten. Ich sollte das wahrscheinlich nicht machen, aber ich poste ein vollständiges Codebeispiel (ohne Fehlerbehandlung), weil es eine Menge kleiner Dinge gibt, die Sie tun müssen, um sicherzustellen, dass Sie das API richtig verwenden:
Wenn Sie mit jeder Datei arbeiten, stellen Sie sicher, dass Sie den Pfad dorthin einfügen (ggf. mit einem Schrägstrich). Sie könnten auch chdir
verwenden, um nach unten zu steigen und aufzusteigen, aber es bringt in der Praxis Komplikationen mit sich (zB können Sie nicht zwei Verzeichnisse gleichzeitig durchqueren), daher empfehle ich Ihnen, Ihr aktuelles Arbeitsverzeichnis beizubehalten und die Verkettung von Pfaden mit Hilfe von Stringmanipulation durchzuführen. p>
Um herauszufinden, ob ein Pfad ein Verzeichnis ist oder nicht (und daher opendir()
it), empfehle ich lstat()
anstelle von stat()
, da letzteres symbolischen Links folgt, was Ihre Verzeichnis-Traversierung bedeuten könnte in einer Schleife gefangen werden und Sie werden mit etwas wie dieser Ctags Ausgabe enden.
Da die Verzeichnisstruktur rekursiv ist, spielt die Rekursion natürlich eine natürliche Rolle im Traversal-Prozess: einen rekursiven Aufruf machen, wenn ein untergeordneter Pfad ein Verzeichnis ist.
Der Name des Verzeichnisses ist nur eine Zeichenkette.
Also opendir ("Dateiname"); ermöglicht es, das Verzeichnis "file" zu lesen.
Allerdings sollten Sie vielleicht in Dateinamen und Pfaden nachdenken.
"usr / Documents / SourceCode" + "/../CS/Assignment4" ist dasselbe wie "usr / Documents / CS / Assignment4", aber ich nehme an, dass Ihnen das führende "/".
fehltNun, ich verstehe nicht, wie Sie verloren gehen können, wie Verzeichnisse funktionieren. Ein Verzeichnis ist nichts anderes als ein "Ordner" in Windows oder Mac OS X. Unterste Zeile hat eine Festplatte ein Dateisystem und ein Dateisystem besteht nur aus Ordnern / Verzeichnissen, die Dateien enthalten (und spezielle Dateien wie benannte Sockets usw.) , das sollte dich jetzt nicht interessieren).
Hoffe das hat zumindest ein bisschen geholfen.
Angelo