C++ c++;使用ifstream打开文件
我一直无法打开该文件。C++ c++;使用ifstream打开文件,c++,file-io,ifstream,wstring,C++,File Io,Ifstream,Wstring,我一直无法打开该文件。fb.is\u Open()永远不会返回true。只有当我在fb.open()中硬编码数据源时,它才能工作 我尝试将其转换为字符串,字符,以及wstring,但没有效果 我遗漏了什么?正确的代码会非常棒,但也会有详细的说明 正在尝试使用数据源变量打开文件: wchar_t dataSource[2048]; DWORD errNum = GetModuleFileName(NULL, dataSource, sizeof(dataSource)); //get curre
fb.is\u Open()
永远不会返回true。只有当我在fb.open()
中硬编码数据源时,它才能工作
我尝试将其转换为字符串
,字符
,以及wstring
,但没有效果
我遗漏了什么?正确的代码会非常棒,但也会有详细的说明
正在尝试使用数据源变量打开文件:
wchar_t dataSource[2048];
DWORD errNum = GetModuleFileName(NULL, dataSource, sizeof(dataSource)); //get current dir.
ifstream fb;
wcscat_s(dataSource, L".confg"); //adds ".config" to get full data Sournce
fb.open(dataSource, ios::in);
if (fb.is_open())
{
//get information
}
fb.close();
以下是我尝试过的一些不起作用的东西:
wstring x=数据源;
x、 c_str()
工作原理是:
fb.open(X:\CPP.Lessons\PluralSight\PluralSight.basicals\Debug\PluralSight.basicals.exe.config,ios::in)您对
GetModuleFileName()的调用错误。最后一个参数用字符表示,而不是用字节表示,返回值表示复制了多少字符:
wchar_t dataSource[2048];
if (GetModuleFileName(NULL, dataSource, 2048) > 0)
{
...
}
或:
或:
或:
也就是说,您正在将.confg
附加到完整文件名的末尾。因此,如果您的应用程序名为myapp.exe
,则您正试图打开myapp.exe.confg
。这就是你真正想要的吗
如果是,请确保.confg
文件确实存在,并且您的应用程序具有访问该文件的权限CreateFile()
将提供比ifstream
更有用的错误信息
否则,假设.confg
文件至少与应用程序位于同一文件夹中,则必须手动从缓冲区中删除文件名部分,然后替换为正确的文件名。看一看,并为这一点。或者,如果文件名为myapp.confg
,请查看
更新:我刚刚注意到您的代码添加了.confg
,但您的注释改为.config
:
//wcscat_s(dataSource, L".confg");
wcscat_s(dataSource, L".config");
您可能输入了错误的文件扩展名:
L.confg“
,而不是代码中的注释所述的L.config”
。这个问题一开始没问题,很明显,您忘记发布测试用例了。然后你提出了一个非常广泛和主观的第二个问题作为补充。什么。@LightnessRacesinOrbit:另外,作为一个静态网站,您如何通过HTTP提供文件内容?此外,该文件包含JS代码-我如何jit并异步执行它?设计网络业务的最佳实践是什么?你的权利。主要问题是为什么文件无法打开。只有使用硬编码的值,它才能工作。另一个问题就是我还有其他问题。我一直在研究这件事,但运气不好。。。到目前为止,我尝试过:wstring x=dataSource;x.c_str()@KerrekSB:还有,我怎样才能为30000人建立一个模型城市?.confg
和.config
是不同的。这只是一个愚蠢的打字错误吗?另外,您的sizeof(数据源)
应该是sizeof(数据源)/sizeof(wchar\u t)
。。或者更具表现力的东西。开局吧,谢谢你的快速回复。是的,我想在GetModuleFileName的末尾添加.config。文件的完整路径是:X:\CPP.Lessons\PluralSight\PluralSight.basicals\Debug\PluralSight.basicals.exe.config。MSDN说一个很好的异常句柄是检查GetModuleFileName的响应是否大于0,这可能是过时的,我会检查一下。
wchar_t dataSource[2048];
if (GetModuleFileName(NULL, dataSource, sizeof(dataSource)/sizeof(dataSource[0])) > 0)
{
...
}
wchar_t dataSource[2048];
if (GetModuleFileName(NULL, dataSource, _countof(dataSource)) > 0)
{
...
}
wchar_t dataSource[2048];
if (GetModuleFileName(NULL, dataSource, ARRAYSIZE(dataSource)) > 0)
{
...
}
//wcscat_s(dataSource, L".confg");
wcscat_s(dataSource, L".config");