2016-03-25 41 views
1

我的目標是發送一個任意的文本文件到一個C++項目構建的exe文件中。在C++項目中,我想讀取發送給exe的文件。因此,我認爲我需要將發送文件的路徑傳遞給應用程序(exe)。windows,C++:發送文件到exe(C++解決方案)並從發送文件讀取數據

我的C++代碼[工作!]:

#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(); 
} 

我的Windows配置:

在下面的路徑,我創建一個快捷方式到EXE(編譯C++的項目): C:\用戶{用戶} \應用程序數據\漫遊\微軟\的Windows \的SendTo

問:

我想與r ight單擊任意文本文件並將它傳遞(SendTo)到exe。如何將發送文件的路徑作爲參數傳遞給應用程序,以便應用程序可以讀取發送的文件?

當路徑作爲參數的代碼行應該是這樣的過去了,我想:

ifstream readFile(argv[1]); 

很多的感謝!

大衛

+0

SendTo已經完成了這個操作。你有沒有測試它,並有任何問題? – smead

+0

我沒有測試過它,因爲argv [1]對我來說太奇怪了。正如「Remy Lebeau」所解釋的,我必須做一些字符串處理來獲得源文件的可解釋路徑。所以,'ifstream readFile(argv [1]); '正是我想要的。接下來是瞭解它的內容並做一些字符串處理。謝謝。 –

回答

1

無論您使用SendToOpenWith,該點擊文件名會被傳遞給你的可執行文件作爲命令行參數。因此,argv[]陣列將包含文件名(在argv[1],除非您的SendTo快捷方式指定了其他命令行參數,在這種情況下,您將不得不相應地調整argv[]索引)。

我剛剛做了一個測試SendToargv[1]工作正常。只要確保您在嘗試打開文件名前檢查argc,例如:

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

是的,你是對的。有用!如何將output.txt寫入到讀取input.txt所在的同一目錄?在我的情況下,輸出目錄是exe所在的位置。我試圖打印argv [1],但似乎是源文件的標識符而不是完整路徑(c:\ foo \ input.txt)。 –

+1

再次檢查。 'argv []'值將包含輸入文件的* full *路徑和文件名。您將不得不編寫代碼來分析值以從文件名中分割路徑,然後您可以將所需的輸出文件名附加到提取的路徑。這是基本的字符串處理101種東西,你應該能夠搜索並找到大量的教程/例子來幫助你。如果你仍然無法弄清楚,請發佈一個新問題。這個問題已經被回答了。 –

+1

或者只使用'boost :: filesystem :: path :: parent_path'。 – MSalters