2016-08-01 27 views
-2

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++

+0

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). –

+0

@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). –

+3

Was passiert, wenn zwei oder mehr Textdateien in diesem Verzeichnis vorhanden sind? Vielleicht sollten Sie den Dateinamen in der Befehlszeile übergeben müssen. –

Antwort

0

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)

+0

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. –

+1

@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. –