我是否总是需要为从std::fstream
类实例化的对象指定绝对路径?换句话说,是否有一种方法可以只指定相对路径,例如项目路径?
我是否总是需要为从std::fstream
类实例化的对象指定绝对路径?换句话说,是否有一种方法可以只指定相对路径,例如项目路径?
你也可以使用相对路径。但是它们是相对于你从中调用可执行文件的环境而言的。
这取决于操作系统,但据我所知,所有主要的系统行为都大致相同。
例如Windows:
// File structure:
c:\folder\myprogram.exe
c:\myfile.txt
// Calling command from folder
c:\folder > myprogram.exe
在上面的示例中,您可以使用"c:/myfile.txt"或"../myfile.txt"访问myfile.txt。如果从根目录调用myprogram.exe,则只有绝对路径才能工作,但是"myfile.txt"将起作用。#include <fstream>
int main() {
std::ifstream ifs("../myfile.txt");
... // Do something sensible with the file
}
fstream::fstream
或 fstream::open
。 - Rob Kennedy如果你有一个从C:\Users\Me
运行的.exe
文件,
并且你想要将一个文件写入到C:\Users\Me\You\text.txt
,
那么你所需要做的就是添加当前路径操作符.
,如下:
std::ifstream ifs(".\\you\\myfile.txt");
能够正常工作
$(SolutionDir)
,这是在项目属性配置页面中定义的一个宏。我假设所有的相对路径都是从$(SolutionDir)
开始的。 - tom_mai78101.//
来使其在Linux上工作,但我本来期望../
可以工作。 - Andrewfopen
)的相对路径相同;在这方面,fstream
没有什么特别之处。src
的文件夹,并且该文件夹包含另一个名为 tmp_folder
的文件夹,其中包含一个名为 readMe.txt
的文本文件。因此可以通过以下方式阅读该文本文件。std::ifstream fin("../src/tmp_folder/readMe.txt");
// main.cpp
int main() {
ifstream myFile("../Folder/readme.txt");
// ...
}
/usr/Douments/dev/MyProject/main.cpp
/usr/Documents/dev/MyProject/Folder/readme.txt
您可以指定相对于当前目录的路径。在Windows上,您可以调用GetCurrentDirectory来检索当前目录或调用SetCurrentDirectory来设置当前目录。还有一些CRT函数可用。
myFile.open("../Release/frequency.dat", ios::in);
*将myFile更改为您的变量名称。