即使文件在同一目录中,ifstream也找不到文件
我有一种从文件中读取布尔向量的方法:
std::vector<bool> OPCConnector::getAlarmVector() {
std::vector<bool> data;
std::ifstream DataFile(filepath);
if (DataFile) {
bool value;
while (DataFile >> value) {
data.push_back(value);
std::cout << value;
}
}
return data;
}
的filepath变量是通过构造分配一个对象属性:
OPCConnector::OPCConnector(std::string fpth) {
filepath = fpth;
}
OPCConnector::OPCConnector(std::string fpth) {
filepath = fpth;
}
在main()函数中,构造函数被调用:
现在,我已经检查了可执行文件的文件夹是通过GetModuleFileNameA(),并确保该文件位于同一目录中并具有相同的名称(此外,我确保扩展名不是文件名的一部分,喜欢"alarmes.txt.txt")。
我调试了第一种方法getAlarmVector(),它永远不会超过if (DataFile)条件,就好像它找不到文件一样。
我使用 Visual Studio 2019 运行代码,但没有任何反应。向量保持为空。错误是没有这样的文件或目录。
默认工作目录是$(ProjectDir),它正是我的文件所在的位置。
编辑:我也尝试过使用相对路径和绝对路径,但都不起作用。
编辑 2:我还使用检查了目录GetCurrentDirectory()并将.txt文件复制到那里,但它不起作用。
解决方案:奇怪的是,我删除了该文件并使用相同的名称再次创建它,并且它起作用了。感谢您的回答。
回答
我的猜测:您当前的工作目录不是您认为的那样,尤其是当您从 IDE 运行时。我知道有几个 IDE,其中当前工作目录是某个构建目录(它因 IDE 而异),除非您专门更改它。
我相当确定 Visual Studio 就是这样一种 IDE。
这是我编写的一个小示例程序;
$ cat Foo.cpp
#include <iostream>
#include <fstream>
int main(int, char **) {
std::ifstream file { "Foo.cpp" };
if (file) {
std::cout << "File opened.n";
}
else {
std::cout << "File not opened.n";
}
}
编译并运行它:
$ g++ --std=c++17 Foo.cpp -o Foo && Foo
File opened.