fstream 无法打开文件
fstream fails to open file
我有一个很奇怪的问题。设置如下:
图书馆 A 使用图书馆 B
两个库都作为共享库独立安装,A 使用 CMake 包链接到 B。
当我创建直接链接到 B 的可执行文件时,一切正常。
然而,当我创建一个链接到 A 的可执行文件时,它正在使用 B,然后由于某种原因,我在 B 中的 fstream 无法打开特定文件。我 100% 确定该文件存在,不需要授权并且当前未使用。 strerror(errno) 抛出的错误是“No such file or directory”。
我真的不知道哪里出了问题。这是我用来打开的代码片段:
ifstream f;
f.open(filename.c_str(), ios_base::in|ios::binary);
if (f.fail()) {
std::cout << "Opening Vocabulary failed: " << std::strerror(errno) << std::endl;
return false;
}
我三重检查了文件名中的路径是否正确。这些是我能想到的最后手段:
- 也许库 A 使用另一个 C++ 标准作为 B,这就是调用 fstream 失败的原因?
- 也许文件名字符串以某种方式损坏,即使路径似乎是正确的?
- 也许某些内存泄漏破坏了我的 c_str() 命令?
还有什么我可以检查的吗?
编辑:啊,我忘了一件事:fstream 命令在头文件的模板函数中。也许与此有关?
Edit2:这是堆栈跟踪。 “ORBVoc.bin”是我要打开的文件。我从中得到的唯一信息是,它不存在……尽管它确实存在。
https://www.file-upload.net/download-14359408/strace.log.html
好吧,显然重启就足够了。今天一切都完美无缺。没有更改权限、文件或代码行。当我的笔记本电脑从休眠状态恢复时,我认为要么出现了严重错误。或者它是一些待处理的 ubuntu 更新?我真的不知道。我可以发誓它在过去的 2-3 天内至少关闭过一次。但是,耶,我没有其他解释。也许更聪明的人可以用他的玻璃球来回答这个问题...
总之,感谢您的解答,感激不尽!至少我了解了 strace $:^)
我有一个很奇怪的问题。设置如下:
图书馆 A 使用图书馆 B
两个库都作为共享库独立安装,A 使用 CMake 包链接到 B。
当我创建直接链接到 B 的可执行文件时,一切正常。 然而,当我创建一个链接到 A 的可执行文件时,它正在使用 B,然后由于某种原因,我在 B 中的 fstream 无法打开特定文件。我 100% 确定该文件存在,不需要授权并且当前未使用。 strerror(errno) 抛出的错误是“No such file or directory”。
我真的不知道哪里出了问题。这是我用来打开的代码片段:
ifstream f;
f.open(filename.c_str(), ios_base::in|ios::binary);
if (f.fail()) {
std::cout << "Opening Vocabulary failed: " << std::strerror(errno) << std::endl;
return false;
}
我三重检查了文件名中的路径是否正确。这些是我能想到的最后手段:
- 也许库 A 使用另一个 C++ 标准作为 B,这就是调用 fstream 失败的原因?
- 也许文件名字符串以某种方式损坏,即使路径似乎是正确的?
- 也许某些内存泄漏破坏了我的 c_str() 命令?
还有什么我可以检查的吗?
编辑:啊,我忘了一件事:fstream 命令在头文件的模板函数中。也许与此有关?
Edit2:这是堆栈跟踪。 “ORBVoc.bin”是我要打开的文件。我从中得到的唯一信息是,它不存在……尽管它确实存在。
https://www.file-upload.net/download-14359408/strace.log.html
好吧,显然重启就足够了。今天一切都完美无缺。没有更改权限、文件或代码行。当我的笔记本电脑从休眠状态恢复时,我认为要么出现了严重错误。或者它是一些待处理的 ubuntu 更新?我真的不知道。我可以发誓它在过去的 2-3 天内至少关闭过一次。但是,耶,我没有其他解释。也许更聪明的人可以用他的玻璃球来回答这个问题...
总之,感谢您的解答,感激不尽!至少我了解了 strace $:^)