文件打开中的 "const wchar_t *"
请帮忙看一下为什么会这样?? 计划: 在命令提示符下输入文件路径名字,然后打开所输的文件.
程序一:
#include <fstream>
#include <string>
#include <iostream>
using namespace std;
int main()
{
string pn;
fstream iof;
cout <<" 请输入路径和文件名(如:e:\\c++\\1.dat)..."<<endl<<" ";
cin >> pn;
iof.open(pn,ios::in);
if(!iof)
{
cout <<" 文件打开错误,请确定输入正确的路径和文件名..."<<endl;
}
else
cout <<" 文件打开正常...";
return 0;
}
编译环境Visual C++ 2005
提示错误:
1>.\_osfile.cpp(32) : error C2664: “void std::basic_fstream<_Elem,_Traits>::open(const wchar_t *,std::ios_base::openmode,int)”: 不能将参数 1 从“std::string”转换为“const wchar_t *”
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> 没有可用于执行该转换的用户定义的转换运算符,或者无法调用该运算符
于是我更正
程序二:
#include <fstream>
#include <string>
#include <iostream>
using namespace std;
int main()
{
string pn;
char cn[50];
fstream iof;
cout <<" 请输入路径和文件名(如:e:\\\\c++\\\\1.dat)..."<<endl<<" ";
cin >> pn;
for(int i=0;i<50;i++) //把字符串转换为字符数组
{
if(i<pn.length())
cn[i] = pn[i];
else
cn[i] = '\0';
}
cout <<cn<<endl; //检查是否转换错误
wchar_t *wch = (wchar_t*)cn; //定义一个wchar_t并指向cn,(强制转换)
const wchar_t *p = wch; //把他变成一个常指针
char *cc = (char*)p; //再转换为char型,和下一句一起验证转换是否错误
cout <<cc<<endl;
iof.open(p,ios::in); //按上一个程序的错误提示,改成const wchar_t*
if(!iof)
cout <<" 文件打开错误,请确定输入正确的路径和文件名..."<<endl;
else
cout <<" 文件打开正常...";
return 0;
}
编译成功,但结果:
请输入路径和文件名(如:e:\\c++\\1.dat)...
e:\\c++\\1.dat //是输入的路径
e:\\c++\\1.dat //说明从char 到 wchar_t*没错
e:\\c++\\1.dat //说明从wchar_t* 到 const wchar_t*没错
文件打开错误,请确定输入正确的路径和文件名... //但为什么还是打不开?(注:把红色的p改成"e:\\c++\\1.dat"正确)
[[it] 本帖最后由 YCVSCY 于 2008-7-17 19:41 编辑 [/it]]