使用Sublime Text 2在Mac上使用fstream的相对路径

时间:2014-02-09 23:12:43

标签: c++ macos sublimetext2

好的,所以我的代码很简单。

#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或可执行文件?

1 个答案:

答案 0 :(得分:0)

argv main()参数是用于调用可执行文件的命令行,因此您可以使用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;
}