Ich habe ein Programm in C++ erstellt, das überprüft, wie viele Wörter ein Text hat. Der Text wird in einer TXT-Datei im selben Verzeichnis wie meine EXE-Datei gespeichert. Ich frage mich, ob es eine Möglichkeit gibt, den Namen meiner .txt-Datei irrelevant zu machen, solange sich die .txt-Datei im selben Verzeichnis wie meine .exe-Datei befindet. Ich möchte in der Lage sein, den Namen der TXT-Datei zu ändern und mein Programm weiterhin erfolgreich auszuführen, ohne die Meldung "Fehler beim Öffnen der Datei" zu erhalten.Lesen von einer TXT-Datei mit einem unspezifizierten Namen aber mit einem bekannten Verzeichnis C++
Lesen von einer TXT-Datei mit einem unspezifizierten Namen aber mit einem bekannten Verzeichnis C++
Antwort
Sie müssen die Dateien in Ihrem App-Ordner auflisten, bis Sie einen mit einer .txt
Dateierweiterung finden.
Allerdings gibt es nichts in den Standard-C++ - Bibliotheken, um das zu handhaben.
Sie benötigen plattformspezifischen APIs verwenden, um den Ordner zu bestimmen, wo Ihre App ausgeführt wird, und dann können Sie plattformspezifischen APIs oder eine 3rd-Party-Cross-Plattform-API 3 verwenden , um die Dateien in diesem Ordner aufzuzählen.
Sobald Sie die Datei entdecken, nur dann können Sie es öffnen.
: (wie das Ergebnis der GetModuleFileName()
auf Windows-Parsing)
: (wie FindFirstFile()
und FindNextFile()
unter Windows)
: (wie boost::filesystem
)
Die C++ 17 [Dateisystem-Bibliothek] (http://en.cppreference.com/w/cpp/filesystem) wird fast genau wie "boost :: filesystem", so dass es erwähnenswert sein kann. –
@MilesBudnek: Das ist aber eine Weile aus. Und wenn man bedenkt, dass viele Leute noch nicht einmal C++ 11 benutzen, ist es nicht wahrscheinlich, dass sie sofort zu C++ 17 springen werden. –
Sie haben zwei Probleme: Der erste ist, dass es keine * Standard * Möglichkeit gibt, den Inhalt von Verzeichnissen in C++ aufzulisten ([zumindest noch nicht] (http://en.cppreference.com/w/cpp/filesystem)). Dazu müssen Sie Betriebssystemfunktionen verwenden. Das zweite Problem ist, dass Ihr Verzeichnis auch nicht wirklich bekannt ist. [Es gibt auch betriebssystemspezifische Funktionen, um das zu erreichen] (http://stackoverflow.com/questions/1528298/get-path-of-executable). –
@DimChtz: Es gibt keine Standard-API zum Abrufen des ausführbaren Pfads des aufrufenden Prozesses (es sei denn, Sie zählen 'argv [0] ', aber das gilt nur für Konsolen-Apps, und es kann auch so liegen). –
Was passiert, wenn zwei oder mehr Textdateien in diesem Verzeichnis vorhanden sind? Vielleicht sollten Sie den Dateinamen in der Befehlszeile übergeben müssen. –