C++ 打开文件相对路径的使用

绝对路径:电脑资源管理器中显示的文件的路径,一般从盘符和根目录开始的文件路径。
相对路径:从某个文件位置开始进行有限的上行或下行访问的文件路径。

在VS C++中,除了转义符号\的使用需要双反斜杠防止转义,在文件路径的表示中,使用以下方式均无区别:

//绝对路径的表示
string path1 = "D:/workspace/data/test.txt";
string path2 = "D://workspace//data//test.txt";
string path3 = "D:\\workspace\\data\\test.txt";
//相对路径的表示
//当前文件位置:"D:/workspace/"
string path1 = "data/test.txt";
string path2 = "data//test.txt";
string path3 = "data\\test.txt";

//访问D盘根目录的文件test2.txt
string path4 = "../test2.txt";
string path5 = "..//test2.txt";
string path6 = "..\\test2.txt";
//路径组合访问D盘根目录的test2.txt
string dir = "D:/workspace/";
string path1 = dir + "../test2.txt";
string path2 = dir + "..//test2.txt";
string path3 = dir + "..\\test2.txt";

那这么写可不可以呢?也是可以的(C++ iostream可以读写)。但是请注意有些封装的读写接口不支持该种文件路径的形式,所以尽量避免使用下面这种文件路径的表示方法。

string path1 = "D:/workspace/../test2.txt";
string path2 = "D:\\workspace\\../test2.txt";
string path3 = "D://workspace//../test2.txt";

C++ 11起,推荐使用R字符串字面量来使得路径字符串以原始的方式使用即不进行转义:

//R前缀的简单使用
string path1 = R"(D:/workspace/data/test.txt)";
string path2 = R"(D:\workspace\data\test.txt)";

详见参考文档:C++ Reference 字符串字面量

在Visual Studio 2015中测试:

void test_path() //测试函数
{
    //路径可更换成上述方式测试,均能正常访问文件
    static string work_dir = "D:/VS2015/AlgorithmTest/Chapter2/Debug"; 
    string txt_path = work_dir + "/../data/test.txt";
    ifstream f(txt_path, ios::in);
    if (!f) {
        f.close();
        cout << "error opening source file." << endl;
        return;
    }
    string line;
    while (getline(f, line)){
        cout << line << endl;
    }
    f.close();
}

END。

你可能感兴趣的:(C++ 打开文件相对路径的使用)