2014-02-09 71 views
0

好的,所以我的代碼非常簡單。在Mac上使用相對路徑使用Sublime Text 2

#include <iostream> 
#include <fstream> 
#include <unistd.h> 
using namespace std; 

int main(){ 
    char a; char mas[5000]; 
    fstream fin; 
    fin.open("input.txt", ios::in); 
    if(!fin.is_open()) cout << "No file found!"; 
    getcwd(mas, 5000); 
    cout << mas; 
    return 0; 
} 

所以我的輸入文件是旁邊的cpp文件和旁邊的內置可執行文件,但顯示錯誤消息。所以我使用getcwd函數檢查了實際工作場所,因爲即使完整路徑沒有工作,我的文件也在桌面上(/ Users/user/Desktop),但getcwd顯示了我 -/Users/user,所以我很困惑,但試圖把我的txt文件在那裏,它的工作,我怎麼能改變這種方法「打開」打開文件相對路徑,實際上是下一個頂部CPP或可執行文件?

回答

0

main()argv參數是用來調用可執行程序的命令行,所以你可以使用argv[0]獲得,以建立您的輸入文件的路徑可執行文件的路徑:

#include <string> 
#include <iostream> 
#include <fstream> 
#include <unistd.h> 
using namespace std; 

int main(int argc, const char **argv){ 
    char a; char mas[5000]; 
    fstream fin; 

    string dirname, inputFilename; 
    const char *p = strrchr(argv[0], '/'); 
    if (p != 0) 
     dirname = string(argv[0], p - argv[0] + 1); 
    inputFilename = dirname + "input.txt"; 

    fin.open(inputFilename.c_str(), ios::in); 
    if(!fin.is_open()) { 
     cout << "No file found!" << endl; 
     return 1; 
    } 
    getcwd(mas, 5000); 
    cout << mas << endl; 
    return 0; 
}