| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 735 人关注过本帖
标题:yu版,问个小问题哈 关于ctring转换为char* 的
只看楼主 加入收藏
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
结帖率:99.76%
收藏
已结贴  问题点数:20 回复次数:4 
yu版,问个小问题哈 关于ctring转换为char* 的
程序代码:
void ClisttestDlg::OnBnClickedOk()
{
    // TODO: 在此添加控件通知处理程序代码
    //CDialogEx::OnOK();
    // TODO: 在此添加控件通知处理程序代码
    CFileDialog dlg(true);
    if (dlg.DoModal() == IDOK)
    {
        //this->MessageBox(L"选择的文件地址:" + dlg.GetPathName() + " | 选择的文件名:" + dlg.GetFileName() ,
        //    L"提示:",MB_OK);
    }
    else
        this->MessageBox(L"你选择了取消按钮");
    /*
    CFileDialog 相关属性值
    GetFileExt 获得所选文件的后缀名
    GetFileName 获得所选文件的名称
    GetFileTitle 获得文件全名  (不含扩展名)
    GetFolderPath 获得文件路径
    GetNextPathName 获得下一个文件路径全名(多选文件时使用)
    GetPathName 获得路径全名
    GetStartPosition 获得所选文件的第一个文件的定位信息(多选时使用)
    */
    FILE* fp;
    //由于fopen()函数中需要的文件名参数是字符型的,所以我们还需要把CString类型的文件名转换为字符类型的变量。
    int i, length;
    //定义i作为循环变量,定义length作为文件路径及文件名的长度
    char* FileName;
    //定义char型的字符指针来存储文件名,给fopen()函数使用
    CString fileName;
    fileName=dlg.GetPathName();
    length=fileName.GetLength();
    //把文件名的长度赋给length变量
    FileName=new char[length];
    //给char型的指针变量FileName分配内存空间
    for(i=0;i<length;i++)   //把CString型变量fileName中的字符一个一个地赋给char型的指针变量FileName
        *(FileName+i)=fileName.GetAt(i);
    *(FileName+length)=NULL;   //在FileName变量的最后加上一个结束标志
    fp=fopen(FileName,"rb");
    if(fp!=NULL) this->MessageBox((LPCTSTR)FileName,(LPCTSTR)fileName,MB_OK); else this->MessageBox(L"文件打开错误",L"文件名转换出现错误",MB_OK);

}
这里如果文件名是ansi的还没啥问题  如果是中文的 就出现错误


2、mfc中 不用fopen(应该是c的东东) 那应该用啥实现类似的功能的
搜索更多相关主题的帖子: 通知 color 
2013-01-08 14:56
yuccn
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:0 
1 CString 是封装的类了,定义出来的是对象
char 是基本数据类型。
可以从CString中读取出来 char *数据的。


2 mfc也可以使用fopen的,包含对应的库就行了。
这个我习惯使用windowsapi 直接调用CreateFile、 OpenFile、ReadFile、WriteFile、CloseHandle
感觉更加方便


我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2013-01-08 17:00
yuccn
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:20 
length=fileName.GetLength(); 获取长度,在new的时候应该+1吧,字符串是要求‘\0’结尾的

length=fileName.GetLength();
     //把文件名的长度赋给length变量
     FileName=new char[length];
     //给char型的指针变量FileName分配内存空间
     for(i=0;i<length;i++)   //把CString型变量fileName中的字符一个一个地赋给char型的指针变量FileName
         *(FileName+i)=fileName.GetAt(i);
     *(FileName+length)=NULL;   //在FileName变量的最后加上一个结束标志
 红色的那个已经是操作非法内存了


其实这样就可以读取file的字符的,如下
CString Test = L"12345"; // 这个好比你的file
char *str = Test.GetBuffer();
// 这个时候可以操作str了 没有必要 *(FileName+i)=fileName.GetAt(i);
Test.ReleaseBuffer( ); // 调用GetBuffer 后,操作完内存就ReleaseBuffer

CString 的用法,可以查看
http://msdn.(v=vs.60).aspx




[ 本帖最后由 yuccn 于 2013-1-8 17:13 编辑 ]

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2013-01-08 17:08
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
我是在网上抄的  呵呵呵

DO IT YOURSELF !
2013-01-08 21:43
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
程序代码:
FILE* fp;
    CString FileName;
    FileName=dlg.GetPathName();
    fp=_tfopen(FileName,_T("rb"));
    if(fp!=NULL)
    {
        //this->MessageBox((LPCTSTR)FileName,L" ",MB_OK);
    }
    else this->MessageBox(L"文件打开错误",L"请继续检查",MB_OK);
这样得以解决 再继续研究中。。。。。

DO IT YOURSELF !
2013-01-09 10:41
快速回复:yu版,问个小问题哈 关于ctring转换为char* 的
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020863 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved