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)
{
...
}
代码如上。如果把程序中生成的路径以字符串字面值的形式作为第一个参数,就可以打开文件。
...全文
784 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
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楼的方法也行不通
内容概要:本文提出了一种基于粒子群优化算法(PSO)的多微电网协调运行与优化方法,旨在面向配电网环境实现高效、稳定、经济的能源调度。研究建立了包含分布式电源、储能系统、负荷及电网交互的多微电网数学模型,综合考虑运行成本最小化、可再生能源最大化利用及供电可靠性等多重目标,通过PSO算法进行多目标优化求解。文中配套提供了完整的Matlab代码实现,涵盖系统建模、目标函数设计、约束条件处理及优化求解全过程,便于读者复现、验证并拓展研究,适用于智能电网、分布式能源管理、微电网优化调度等领域的科研与工程实践。; 适合人群:具备电力系统分析、优化算法理论基础及Matlab编程能力的研究生、科研人员及从事新能源系统设计的工程技术人员。; 使用场景及目标:①深入理解多微电网系统在复杂配电网环境下的协调运行机制与能量管理策略;②掌握粒子群优化算法在电力系统多目标优化问题中的建模、实现与调参技巧;③实现面向实际应用场景的微电网经济调度、可再生能源消纳与供电可靠性提升的综合优化仿真验证。; 阅读建议:建议读者结合Matlab代码逐模块分析,重点理解系统模型构建、目标函数与约束条件的数学表达及PSO算法的具体实现流程,关注种群初始化、适应度计算、速度与位置更新等关键环节的编程细节。在掌握基础后,可尝试调整算法参数、更换其他智能优化算法(如遗传算法、灰狼优化器)进行对比实验,以深化对多微电网优化问题本质的认识。

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧