2016-03-25 4 views
1

Mein Ziel ist es, eine beliebige Textdatei an eine Exe zu senden, die ein Build eines C++ Projekts ist. Im C++ Projekt möchte ich die Datei lesen, die an die exe gesendet wurde. Daher denke ich, dass ich den Pfad der gesendeten Datei an die Anwendung (exe) übergeben muss.Windows, C++: Datei an exe (C++ Lösung) senden und Daten aus der gesendeten Datei lesen

My C++ Code [funktioniert!]:

#include "stdafx.h" 
#include <string.h> 
#include <iostream> 
#include <fstream> 
#include <string> 

using namespace std; 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    std::string readLineFromInput; 

    ifstream readFile("input.txt"); // This is explizit. 
            // What I need is a dependency of passed path. 
    getline(readFile, readLineFromInput); 

    ofstream newFile; 
    newFile.open("output.txt"); 
    newFile << readLineFromInput << "\n"; 

    newFile.close(); 
    readFile.close(); 
} 

Mein Windows-Konfiguration:

In dem folgenden Pfad ich eine Verknüpfung zu der exe erstellt (Build von C++ Projekt): C: \ Benutzer {Benutzer} \ AppData \ Roaming \ Microsoft \ Windows \ SendTo

Frage:

ich r wollen Klicken Sie auf eine beliebige Textdatei und übergeben Sie sie (SendTo) an die exe. Wie kann ich den Pfad der gesendeten Datei als Argument an die Anwendung übergeben, sodass die Anwendung die gesendete Datei lesen kann?

Wenn der Pfad als Argument übergeben wird die Codezeile so sein sollte, ich denke:

ifstream readFile(argv[1]); 

Vielen Dank!

David

+0

SendTo bereits tut genau dies. Hast du es getestet und Probleme? – smead

+0

Ich habe es nicht getestet, weil argv [1] mir zu komisch schien. Wie "Remy Lebeau" erklärte, muss ich eine String-Behandlung durchführen, um einen interpretierbaren Pfad zur Quelldatei zu erhalten. Also, 'ifstream readFile (argv [1]); 'macht genau das, was ich will. Als nächstes ist der Inhalt zu verstehen und einige String-Handhabung. Vielen Dank. –

Antwort

1

Ob Sie SendTo oder OpenWith, wird die angeklickt Dateinamen ausführbare Datei als Befehlszeilenparameter übergeben werden. Daher enthält das Array argv[] den Dateinamen (unter argv[1], es sei denn, Ihre Verknüpfung SendTo gibt zusätzliche Befehlszeilenparameter an. In diesem Fall müssten Sie den Index argv[] entsprechend anpassen).

Ich habe gerade einen Test mit SendTo und argv[1] funktioniert gut. So stellen Sie sicher, dass Sie argc überprüfen, bevor Sie den Dateinamen zu öffnen, zB:

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    if (argc > 1) 
    { 
    std::string readLineFromInput; 

    std::ifstream readFile(argv[1]); 
    if (readFile) 
     std::getline(readFile, readLineFromInput); 

    std::ofstream newFile(_T("output.txt")); 
    if (newFile) 
     newFile << readLineFromInput << "\n"; 
    } 
} 
+0

Ja, Sie haben Recht. Es klappt! Wie kann ich output.txt in dasselbe Verzeichnis schreiben, in dem input.txt gelesen wurde? In meinem Fall ist das Ausgabeverzeichnis, wo sich die Exe befindet. Ich habe versucht, argv [1] zu drucken, aber es scheint ein Bezeichner zu sein und kein vollständiger Pfad (c: \ foo \ input.txt) zur Quelldatei. –

+1

Überprüfen Sie erneut. Der 'argv []' - Wert enthält den * vollständigen * Pfad und Dateinamen der Eingabedatei. Sie müssen Code schreiben, um den Wert zu analysieren, um den Pfad vom Dateinamen zu trennen. Anschließend können Sie den gewünschten Ausgabedateinamen an den extrahierten Pfad anhängen. Dies ist eine grundlegende Art der Handhabung von 101 Sachen, Sie sollten in der Lage sein, herum zu suchen und viele Tutorials/Beispiele zu finden, um Ihnen zu helfen. Wenn Sie es immer noch nicht herausfinden können, schreiben Sie eine neue Frage. Diese Frage wurde wie gewünscht beantwortet. –

+1

Oder verwenden Sie einfach 'boost :: filesystem :: path :: parent_path'. – MSalters