我知道有一些关于 std::ifstream::open() 的问题,但答案并没有解决我的问题。它们中的大多数都是特定于 Win32 的,我使用的是 SDL,没有触及任何特定于操作系统的功能(......没有包含在 SDL 中)。
问题是: std::ifstream::open() 似乎不再起作用,因为我已经从 Dev-C++ 切换到 Code::Blocks (我一直在使用相同的 MinGW-GCC 后端),以及从 Windows XP 到 Vista。(它也可以与 OS X / xcode(GCC 后端)完美配合。)
我的项目链接到一个静态库,其中 #includes <string>、<iostream>、<fstream> 和 <cassert>,然后调用静态库中定义的功能,然后调用 std::ifstream::open () (这次是直接)。在此之后,流计算为 false(使用隐式 bool 转换运算符和 good() 方法)。
代码:
#include "myStaticLibrary.hpp"
int main(int argc, char **argv)
{
std::string filename("D:/My projects/Test/test.cfg");
std::cout << "opening '" << filename << "'..." << std::endl;
bool success(false);
// call to functionality in the static library
{
std::ifstream infile(filename.c_str());
success = infile.good();
// ...
}
// success == false;
// ...
return 0;
}
stdcout.txt 说:
打开 'D:/My projects/Test/test.cfg'...
当我打开 stdcout.txt 并将带有文件名的路径复制粘贴到开始菜单/运行时,文件会按原样打开(我不完全确定这是多少诊断值;另外,地址是转换为以下格式:file:///D:/My%20projects/test/test.cfg)。
我还尝试用双反斜杠转义序列替换 '/'(同样,斜杠以前也可以正常工作),但结果是一样的。
这是一个调试版本,但我使用的是从 main() 的 argv[0] 获取的整个绝对路径。
我哪里出错了,我需要做些什么来解决它?