fopen第一个参数是CString为什么打不开文件

yanpf 2008-02-22 10:18:28

CString ffff[i].second;
CString fileName;

ffff[i].second = _T("D:\\Points");
fileName = _T("WellPos.txt");
strFullPath = ffff[i].second + '\\' + '\\' + fileName;

if((pf = fopen(strFullPath, "r+")) == NULL)
{
...
}
代码如上。如果把程序中生成的路径以字符串字面值的形式作为第一个参数,就可以打开文件。
...全文
705 17 打赏 收藏 举报
写回复
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
public 2012-01-11
  • 打赏
  • 举报
回复
要把UNICODE 转换为 ANSI

调用API
WideCharToMultiByte

::WideCharToMultiByte

具体上网上查查,很多例子

rabbit729 2008-02-22
  • 打赏
  • 举报
回复
fopen((LPCTSTR)strFullPath, "r+"))
试试这个
jjfwenwenti 2008-02-22
  • 打赏
  • 举报
回复
没问题啊,你代码有问题。
strFullPath = ffff[i].second + _T("\\") + fileName;
还不行的话,得发全代码了~
yanpf 2008-02-22
  • 打赏
  • 举报
回复
CString str1 = _T("D:\\Points\\WellPos.txt");
int i = strcmp(str1, strFullPath);
int x = 0;
if (strFullPath == str1)
{
x = 1;
}
else
{
x = -1;
}
我用了如上几行代码进行测试,发现i等于0,而x却等于-1。
yanpf 2008-02-22
  • 打赏
  • 举报
回复
也试过了。不行
  • 打赏
  • 举报
回复
拼文件的那行改成这个试试看.

strFullPath=ffff[i].second+"\\"+fileName;
yanpf 2008-02-22
  • 打赏
  • 举报
回复
_wfopen,转化为char*,我都试过了,不行
yanpf 2008-02-22
  • 打赏
  • 举报
回复
_tfopen也不行
  • 打赏
  • 举报
回复
你用 _tfopen
替代fopen试试看
awperpvip 2008-02-22
  • 打赏
  • 举报
回复
fopen要(const)char*的
你可以转化为char*后再用;
wfopen似乎可以直接用~
yanpf 2008-02-22
  • 打赏
  • 举报
回复
ffff[i].second是pair<CString,CString>型的变量中的第二个成员。加两次'\\'是想起到转义字符的作用,问题已解决。是由于不可见字符的原因引起。谢谢各位!
danscort2000 2008-02-22
  • 打赏
  • 举报
回复
另外 strFullPath = ffff[i].second + '\\' + '\\' + fileName;
为什么要加两次'\\'?
一次就可以了,去掉其中的一个 + '\\'
try again
danscort2000 2008-02-22
  • 打赏
  • 举报
回复
你是用UNICODE模式还是ANSI模式啊?

UNICODE和ANSI是不一样的

你在代码 fopen....前加个

TRACE("Fullpath is :%s\n",strFullPath);
看看你的strFullPath到底是什么东西
我没看明白你上面的CString ffff[i].second
是什么意思? 是想说 ffff[i].second是前面声明的一个CString?
rabbit729 2008-02-22
  • 打赏
  • 举报
回复
fopen(((LPCTSTR)strFullPath)->c_str(),"r+"))
试一下这个
KenYuan2016 2008-02-22
  • 打赏
  • 举报
回复
用c++的string 不用CString
czp_opensource 2008-02-22
  • 打赏
  • 举报
回复
强转是不行的。 所以9楼的方法不行。 CString 是微软实现的一个字符串操作的类。 fopen是C的标准文件操作函数他的两个参都都是const char*所以你传CString是不行的。 CString提供了一个方法GetBuffer()生成char*字符串的函数。不过用完你要负责对这块空剖释放。
到google上查CString to char* 有很多例子的, 这就不写了。
yanpf 2008-02-22
  • 打赏
  • 举报
回复
9楼的方法也行不通
相关推荐
发帖
C++ 语言

6.3w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
帖子事件
创建了帖子
2008-02-22 10:18
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下