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