Struct dirent....opendir()....
-
Hallo!
Ich habe ein blödes Problem mit dem Auslesen von Verzeichnissen.
Ich schreibe meine Programme in c++, nutze für die Systemprogrammierung die C-Bibliothek (anders ist es wohl auch nicht möglich).
Das Programm soll eine Datei in einem Verzeichnis finden und diese dann öffnen bzw. auslesen. Der Name des Verzeichnisses soll während des Programm-Ablaufs vom Benutzer eingegeben werden (über einen String und .c_str()). Zum öffnen der Datei nutze ich wiederum die C++ Funktionen.
Nun habe ich das Problem, dass zwar die Dati gefunden wird, aber nicht geöffnet werden kann.
In anderen Programmen war das irgendwie möglich, der Code war aber grundsätzlich gleich. Ich habe auch versucht das Versuchsprogramm in einem anderen Verzeichnis zu kompilieren und da schien es nicht mehr zu gehen (mit dem öffnen der Datei).
Die Rechte für die Datei sind gesetzt, jeder kann darauf zugreifen.
Nun weiß ich nicht mehr weiter und hoffe ihr könnt mir einen Hinweis geben.
Vielleicht habe ich was grundlegendes Vergessen?
Die Quellcodes wollte ich noch nicht hier hinein kopieren, das gäbe zu viel Text, wer aber ihn wünscht für den kann ich es natürlich tun. Ich hoffe aber dass die bisherige Beschreibung ausreicht.Vielen Dank im Voraus!
mj
-
super::ka schrieb:
Die Quellcodes wollte ich noch nicht hier hinein kopieren, das gäbe zu viel Text,
mach ein minimales Beispiel, welches das selbe Problem hat.
So kann man dazu nicht viel sagen.
-
Du musst darauf achten, dass
a) Dein Programm das Verzeichnis wieder geschlossen hat, bevor Du eine Datei daraus oeffnest. Ist das Verzeichnis geoeffnet, hast Du wahrscheinlich ein Read/Write-Lock auf das Verzeichnis, was den Schreibzugriff in das Verzeichnis verhindert.
b) Dass der Pfad fuer Deine Datei identisch ist mit dem Pfad, in dem Du die Datei gefunden hast. Liegt die Datei in "abc/def/ghi" musst Du natuerlich auch "abc/def/ghi" zum Oeffnen der Datei angeben.
getcwd(0,0) liefert Dir das aktuelle Verzeichnis Deines Programms. Du musst noch moeglicherweis etwas Code schreiben, um den korrekten Pfad zu ermitteln, wenn der gefundene Pfad nicht immer unterhalb Deines Programmverzeichnisses liegt.
-
Nachdem ich eine weile mit struct dirent* und DIR...rumgemacht habe, kam ich gerade auf eine ganz primitive Lösung:
Eingabe des Verzeichnisses:
string verzeichnis;
cin<<verzeichnis;
Öffnen der gewünschten Datei:
datei.open((verzeichnis+"Ebene X").c_str());Also nur eine Summierung zweier Strings. Total blöd aber total effektiv, und ich habe mich wochenlang mit dem Problem herumgeschlagen.
Nun wandert mein Buch "C und Linux" wieder zurück ins Regal, und ich kann mein Programm weiterschreiben...Vielen Dank für eure Hilfen!