【发布时间】:2021-07-07 16:22:38
【问题描述】:
我有一个从文件中读取布尔向量的方法:
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;
}
而在main()函数中,构造函数被调用:
std::vector<bool> activations;
std::string filepath = "alarmes.txt";
OPCConnector opcc = OPCConnector(filepath);
activations = opcc.getAlarmVector();
现在,我通过GetModuleFileNameA() 检查了可执行文件的文件夹是什么,并确保该文件位于同一目录中并且具有相同的名称(另外,我确保扩展名不是文件名的一部分,如"alarmes.txt.txt")。
我调试了第一个方法getAlarmVector(),它永远不会超过if (DataFile)条件,就好像它找不到文件一样。
我使用 Visual Studio 2019 运行代码,但没有任何反应。向量保持为空。错误是没有这样的文件或目录。
默认工作目录是$(ProjectDir),它正是我的文件所在的位置。
编辑:我也尝试过同时使用相对路径和绝对路径,但都不行。
编辑 2:我还检查了使用 GetCurrentDirectory() 的目录并将 .txt 文件也复制到那里,但它不起作用。
解决方案: 奇怪的是,我删除了该文件并再次使用相同的名称创建了它,它仍然有效。感谢您的回答。
【问题讨论】:
-
使用VS,您需要将文件放在源文件所在的相同位置。例如,如果您的项目名为 CoolCode。你应该有一个像
SOMEDRIVE:path_to_projectfiles/CoolCode/CoolCode/这样的路径,在那里,会有你的源文件和一个调试和发布文件夹。把你的文本文件放在那里,看看它是否打开。 -
else { std::perror("OpenDataFile"); }和stderr你会知道问题出在哪里。 -
感谢您的快速回复。以防万一,我也将文件复制到那里,以及其他几个文件夹中。似乎没有一个工作。发布编辑,
-
Ok
No such file or directory表示路径无效或当前目录与您假设的不同。我猜 Jeseph Lastson 是对的。