导航
  • 主页
  • VC综合技术
  • 互联网技术
  • MFC AppLauncher
  • .NET 技术
  • 界面
  • 进程
  • 算法
  • 硬件/系统
  • 数据库
  • VC++技术资源

一个关于CFile和char的问题

lili1982623 2004-04-13 07:20:03
我遇到了一个问题
我的实现函数是Edfile(char file[],char key,char cfile[]);
而我有一个CString filename;filename 是一个文件的路径名,怎样才能把filename用到Edfile( char file[],char key,char cfile[])里
...全文
20 点赞 收藏 15
写回复
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
快乐鹦鹉 2004-04-14
实在不行的话, CString str = "sdf";
char *pChar = new char[str.GetLength()];
memcpy(pChar,str,str.GetLength());总应该可以了吧。
回复
lili1982623 2004-04-14
我是这样做的
CString filename是从一个Edit box控件(映射了一个变量CString m_path)的内容(内容为文件的路径)
filename=m_path;//即得到了文件的完整路径名
char *str=filename.GetBuffer(filename.GetLength());
再用到EDfile(str,key,char cfile[])中时,我发现str的没有内容,是空的,根本就不能完成我的功能。应当要怎么办,才会使str里有内容
回复
vollin 2004-04-14
但是GetBuffer( int nMinBufLength )里有参数,如果里面我改为文件的长度,就出错了

对啊,你只能是引用它,如果用GetBuffer(0)得到它字符串的起始地址也只能够改它已有的空间,不能改变长度。CString是一个类,它还记录有字符串的长度等内容,它为字符串分配的空间也是变化的,所以不可能通修改它所指向的字符串的内容来改变其长度。
但你可以把你修改后的值做为函数牛农对返回值再赋给CString就可以了。
回复
w3guy 2004-04-14
Edfile(char file[],char key,char cfile[]);
改为
Edfile(LPCSTR file,char key,LPCSTR cfile);
就可以直接传CString了
Edfile(filename , ....)
回复
JoiseLI 2004-04-14
GetBuffer重载了,可以没有参数的,取所有值
回复
vollin 2004-04-14
GetBuffer(0)就OK啦。
回复
快乐鹦鹉 2004-04-14
不是文件的长度,而是文件名称的长度。比如:
CString str;
int len = str.GetLength();
char* pChar = str.GetBuffer(len);
回复
寻开心 2004-04-14
CString strString;
char *pStr;
pStr = strString.GetBuffer( strString.GetLength());
pStr .....
strString.ReleaseBuffer();
回复
寻开心 2004-04-14
CString filename是从一个Edit box控件(映射了一个变量CString m_path)的内容(内容为文件的路径)
filename=m_path;//即得到了文件的完整路径名
str=(LPSTR)(LPCTSTR)filename;
执行EDfile(str,key,char cfile[])却不能得到我要的结果


你能确定,上述代码执行的时候filemane里面的内容就是和CEdit当中的内容一致吗?
怀疑你没有UpdateData或者没有用GetDlgItem(idc_edit)->GetWindowText这样的方式得到真正的编辑控件内的字符串内容
回复
1HelloWorld 2004-04-14
把你调用EDfile前的str打印出来看看,
是不是路径错误?
还有d:\vc\m1.txt应该是d:\\vc\\m1.txt吧?
回复
lili1982623 2004-04-14
我都不好意思再说了,还达不到我的目的
为什么我这样却可以呢
CString filename="d:\vc\m1.txt";
char* str;
str=(LPSTR)(LPCTSTR)filename;
执行EDfile(str,key,char cfile[])就能得到我要的结果
如果按下面
CString filename是从一个Edit box控件(映射了一个变量CString m_path)的内容(内容为文件的路径)
filename=m_path;//即得到了文件的完整路径名
str=(LPSTR)(LPCTSTR)filename;
执行EDfile(str,key,char cfile[])却不能得到我要的结果


回复
lili1982623 2004-04-13
但是GetBuffer( int nMinBufLength )里有参数,如果里面我改为文件的长度,就出错了
回复
快乐鹦鹉 2004-04-13
GetBuffer返回就是char*类型了
回复
寻开心 2004-04-13
char * pStr = fileName.GetBuffer();
EDfile(...)
fileName.ReleaseBuffer();
回复
lili1982623 2004-04-13
怎么样把filename 代替char file[]
回复
发动态
发帖子
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……