C++ MFC文件打开文本框和数据类型转换

MFC文件框操作

一  选择文件夹

/*

typedef struct _browseinfoW {
    HWND        hwndOwner; //对话框的所有者窗口的句柄。
    

   PCIDLIST_ABSOLUTE pidlRoot;
   /*
     一个 PIDL,指定要从中开始浏览的根文件夹的位置。 
      对话框中仅显示命名空间层次结构中的指定文件夹及其子文件夹。 
      此成员可以为 NULL;在这种情况下,将使用默认位置。
   */


    LPWSTR       pszDisplayName;
    /*
      指向缓冲区的指针,用于接收用户选择的文件夹的显示名称。
      假定此缓冲区的大小为MAX_PATH个字符。
      #define MAX_PATH    260
    */

    
    LPCWSTR      lpszTitle;
    /*
       指向以 null 结尾的字符串的指针,该字符串显示在对话框中的树视图控件上方。
       此字符串可用于向用户指定指令。
     */

    
    UINT         ulFlags;
    /*指定对话框选项的标志。 
     此成员可以是 0,也可以是以下值的组合。 
     版本号是指 SHBrowseForFolder 识别在更高版本中添加的标志所需的最低版本 Shell32.dll。 
     有关详细信息 ,请参阅 Shell 和公共控件版本 。
     BIF_RETURNONLYFSDIRS (0x00000001)
        0x00000001。 仅返回文件系统目录。 如果用户选择不属于文件系统的文件夹,“ 确定” 按钮将灰显。
     BIF_DONTGOBELOWDOMAIN (0x00000002)
        0x00000002。 不要在对话框的树视图控件中包含域级别以下的网络文件夹。
     BIF_NEWDIALOGSTYLE (0x00000040)
        0x00000040。 版本 5.0。 使用新的用户界面。 设置此标志为用户提供了可以调整大小的较大对话 
     框。对话框具有多个新功能,包括:对话框中的拖放功能、重新排序、快捷菜单、新文件夹、删除和其他 
     快捷 菜单命令。


    */
    
    BFFCALLBACK  lpfn;
    /*指向发生事件时对话框调用的应用程序定义函数的指针。
      有关详细信息,请参阅 BrowseCallbackProc 函数。 此成员可以为 NULL。
    */
   
    LPARAM       lParam;
    /*
       一个应用程序定义的值,对话框将传递给回调函数(如果在 lpfn 中指定了一个值)。
    */
   
    int          iImage;
   /*
       一个整数值,用于接收与所选文件夹关联的图像的索引,存储在系统映像列表中
    */
} BROWSEINFOW, *PBROWSEINFOW, *LPBROWSEINFOW;

#define BROWSEINFO  BROWSEINFOW


*/






BROWSEINFO  bi;   //包含 SHBrowseForFolder 函数的参数,并接收有关用户选择的文件夹的信息
bi.hwndOwner = NULL;  //调用窗口句柄设置为空,即没有句柄
bi.pidlRoot = CSIDL_DESKTOP;//文件夹的根目录,此处为桌面
bi.pszDisplayName = NULL;//文件夹名称设置为空
bi.lpszTitle = NULL;//显示位于对话框左上部的提示信息
bi.ulFlags = BIF_DONTGOBELOWDOMAIN | BIF_RETURNONLYFSDIRS | BIF_NEWDIALOGSTYLE;//有新建文件夹按钮
bi.lpfn = NULL;
bi.iImage = 0;
LPITEMIDLIST pidl = SHBrowseForFolder(&bi);//调用选择对话框
if (pidl == NULL) //对象为空
{
	
	return;//关闭文件夹对话框
}
TCHAR strFolder[MAX_PATH];
SHGetPathFromIDList(pidl, strFolder);//将用户选择文件夹信息放到缓冲区中

//GetDlgItem(IDC_EDIT3)->SetWindowText(strFolder);//根据需要将文件夹路径显示在MFC控件上

二 遍历文件夹中的子文件夹名

#include <io.h>
CString temp;
_finddata64i32_t fileInfo;
intptr_t hFile = _findfirst("D:\\*", &fileInfo); 
/*以遍历D盘下的所有文件夹名为例 D:\\* 注意*表示全部 不能漏了 */

if (hFile == -1) {
	return ;
}

do
{   //根据需要对每个文件夹名做出操作
    ......
/*
	string tmp = fileInfo.name;
	temp=tmp.c_str();
	pDlg->MessageBox(temp, _T("文件信息"), MB_OK); 
*/

} while (_findnext(hFile, &fileInfo) == 0);

三 遍历文件夹下有的文件

#include <vector>
#include <string>
#include <io.h>	
vector<string> files;//存储文件路径

intptr_t file_handle = 0;
struct _finddata_t file_info;
string temp,tmp1,tmp3,tmp4;
CString tmp2;
string folderName_str="D:\\";//以遍历D盘下的文件为例

if ((file_handle = _findfirst(temp.assign(folderName_str).append("/*").c_str(), &file_info)) != -1)//assgin 字符串直接赋值 遍历寻找所有文件,所以后缀是/* 要是指定的文件就是 /*.指定后缀名
{
	do
	{  //文件名已被存入file_info中
	   files.push_back(temp.assign(folderName_str).append("\\").append(file_info.name));
	} while (_findnext(file_handle, &file_info) == 0); //遍历下一个成功
	_findclose(file_handle); //遍历结束,关闭文件夹句柄
}

四  打开文件对话框 获取选择的文件名

CString filter;
filter = "All Files (*.*)|*.*||"; //文件过滤器
CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY, filter);
CString str;
if (dlg.DoModal() == IDOK)
{

	str = dlg.GetPathName(); //获取文件名
	//MessageBox(str);

}
USES_CONVERSION; //组件使用
CStringA stra(str);//CString转string
string  imagename = stra.GetBuffer();
stra.ReleaseBuffer();

数据类型转换

一 : CString 转 string

//多字节编码

CString test= "test";
std::string str = test.GetBuffer();

//unicode编码
//方法一

CString test=L"helloworld";
USES_CONVERSION; //组件使用
CStringA stra(str);//CString转string
string  imagename = stra.GetBuffer();
stra.ReleaseBuffer(); //注意要释放资源

//方法二

USES_CONVERSION; //组件使用
//CT2A其实就是CW2A就是将Unicode转换为多字符集ASCII,也可写成CW2A
std::string str = CT2A(test.GetString());
//str=CW2A(test.GetString())

//方法三

CString strData = _T("test"); 
std::string strTempData = (CStringA)strData; 

二: string 转 CString

//不存在string到CString的构造函数,所以只能先声明CString变量再赋值
CString cstr;
string str="123";
cstr=str.c_str();

//或者format函数
cstr.Format(L"%s",strStr.c_str() );

三:CString 转 char *

CString cstr=L"test";
//方法一 直接转换

char *p =(LPSTR)(LPCTSTR)cstr;

//方法二 间接转换 CString->string->char*

//转化为string的方法如上
char* pstr=string.c_str();



四: char* 转  CString

//format
CString cstr;
char *pstr="test";
cstr.Format("%s",pstr);

五: char * 转 string

//方法一 构造

char *pstr="test";
string str(pstr);

//方法二 赋值

string str=pstr;

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值