Existier Datei?
-
Liebe Forum-Gemeinde,
wie kann ich in C++ überprüfen, ob eine *.EXE-Datei im aktuellen Verzeichnis vorhanden ist? Mit fstream file("datei.exe", ios::binary) kommt immer, dass sie nicht vorhanden ist, selbst wenn sie existiert.
Wer kann mir helfen?
Vielen Dank im Voraus.
-
Hallo,
boost::filesystem könnte dir helfen:
http://www.boost.org/libs/filesystem/doc/operations.htm#existsWobei das auch so gehen sollte, allerdings nicht ohne die Datei zu öffnen, bzw. nicht ohne betriebsystemspezifische Sachen.
-
Schau in die C++-FaQ, da gibt es unter Ströme und Dateien ein gutes Beispiel, um das zu überprüfen.
MfG MAV
-
Also, ich habe nun nochmals die Codes aus den FAQ getestet. Sie funktionieren auch, aber nur bei TXT-Dateien. Will ich eine EXE einlesen bzw. überprüfen erhalte ich entweder immer ein positives oder immer ein negatives Ergebnis, aber nie das richtige. Was mache ich falsch?
ifstream f("test.txt", ios::in);
if(f.is_open()) { printf("\nF is GOOD!\n"); }
ifstream fb("test.exe", ios::in);
if(fb.is_open()) { printf("\nB is GOOD!\n"); }
-
Könnte es sein, das die EXE die du "öffnen" willst, die EXE ist, die gerade ausgeführt wird? Weil dann hat sie schon ein Prozess geöffnet, und das Betriebssystem sagt dann natürlich: "Nicht so mein Freundchen!"
Bereits geöffnete Dateien sind dann für andere Prozesse tabu.
-
@Artchi:
Wäre aber nach dieser Aussagewie kann ich in C++ überprüfen, ob eine *.EXE-Datei im aktuellen Verzeichnis vorhanden ist?
recht unlogisch, weil Aktualität eines Verzeichnises ja davon abhängt, wo die momentan ausführende EXE liegt, wodurch sich die Frage erübrigt.
MfG MAV
-
Also um alle Klarheiten zu beseitigen: Es handelt sich NICHT um die Datei, die gerade ausgeführt wird
Hat noch jemand einen hilfreichen Tipp für mich, wie ich das Problem schnell und einfach lösen kann?
-
Ich weiß nicht was für eine IDE du benutzt, bei VC NET ist es aber so, dass mit
"foo.txt" der Ort gemeint ist wo auch deine Projektdateien liegen, auch wenn die
Exe deines Programmes im Unterordner Debug oder Release liegt, ist "foo.txt" direkt
in dem Projektordner.
Gilt aber soweit ich weiß nur, wenn du es über die IDE startest sonst nicht.
-
@SirLant:
Stimmt.
-
Ich benutze VC++ 6. Die EXE starte direkt aus dem Debug-Ordner, wo auch die andere EXE liegt. Und wie gesagt, bei normalen Text-Files funktioniert es ja, aber ich kann doch eine EXE nicht genauso einlesen, wie ein PlainText?! Zumindest, funktioniert es bei mir nicht.
-
Verschieb die andere EXE mal in den Ordner über dem Debug-Ordner und teste es dann.
-
Danke für eure Hilfe! Es scheint nun zu gehen.
Ich habe nun die debuggte EXE und die zu findende EXE in ein separates Verzeichnis kopiert und dort wird die gesuchte Datei gefunden, allerdings nur mit ios::in. Mit ios::binary findet er sie nie!