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");