1.获得动态设置的文件夹的路径。不包含文件名,代码如下:
char szSelected[MAX_PATH] = {0};
char szSelected_m[MAX_PATH] = {0};
LPITEMIDLIST pidl;
BROWSEINFO bi;
bi.hwndOwner = this->m_hWnd; //窗口句柄
bi.pidlRoot = NULL; //文件夹根
bi.pszDisplayName = szSelected;
bi.lpszTitle = ""; //窗口标题
bi.ulFlags = BIF_RETURNONLYFSDIRS; //对话框外观和功能
bi.lpfn = NULL; //事件回调函数
bi.lParam = NULL; //传给回调函数的参数
bi.iImage = NULL; //被选取的文件夹的图片索引
if((pidl = SHBrowseForFolder(&bi)) != NULL)
{
if(SUCCEEDED(SHGetPathFromIDList(pidl, szSelected)))
{
CString mm;
mm.Fomate(_T(szSelected));
MessageBox(mm);
}
}
说明:1.此段都不用改,结果存放在字符串mm中。
效果如下图:
2.获得另存为设置的文件路径,包含文件名,代码如下:
// 设置过滤器
TCHAR szFilter[] = _T("所有文件(*.*)|*.*||");
// 构造打开文件对话框
CFileDialog fileDlg(FALSE, NULL, NULL, 0, szFilter, this);
CString strFilePath;
// 显示打开文件对话框
if (IDOK == fileDlg.DoModal())
{
// 如果点击了文件对话框上的“打开”按钮,则将选择的文件路径显示到编辑框里
strFilePath = fileDlg.GetPathName();
MessageBox(strFilePath);
}
说明:1. 路径存放在字符串strFilePath中。
2.此段都不用更改。
3.CFileDialog类的函数:
GetFileExt():获得选定文件的后缀名。
GetFileName():获得选定文件的名称,包括后缀名。
GetFileTitle():获得选定文件的标题,即不包括后缀名。
GetFolderPath():获得选定文件的目录。
GetNextPathName():获得下一个选定的文件的路径全名。
GetPathName():获得选定文件的路径全名。
GetReadOnlyPref():获得是否“以只读方式打开”。
GetStartPosition():获得文件名列表中的第一个元素的位置。
3.在获得的路径中只有一个“\”(如D:\IMAGE),但写文件时需要两个“\\”(如 D:\\IMAGE)的解决。
说明:在C语言中,“\”并无实际意义,windows的路径中的“\”是C语言中的“\\”,固我们需要给获得的字符串路径加一个“\”。
代码如下:
CString position_img_M;
char szSelected_m[MAX_PATH] = {0};// MAX_PATH可任取,这里取260
int j = 0;
for (int i=0;i<(sizeof(szSelected)/sizeof(szSelected[0]-1));i++)
{
if(szSelected[i]=='\\')
{
szSelected_m[j] = szSelected[i];
j++;
szSelected_m[j] = '\\';//这里的'\\',相当于实际加了一个'\'
j++;
}
else
{
szSelected_m[j] = szSelected[i];
j++;
}
}
position_img_M.Format(_T(szSelected_m));
说明:更改后的结果存放在字符串position_img_M中。
4.在指定地点创建新文件夹。代码如下:
CString position_img_M1;
position_img_M1 = "D:\\image"
if (!PathIsDirectory(position_img_M1))//不存在则创建,。
{
CreateDirectory(position_img_M1, 0);//不存在则创建
}
Else//或存在时可以略过,即去掉else语句。
{
MessageBox(_T(“该文件夹已存在”));
}
说明:1.此段代码只用更改position_img_M1的内容,即新建文件夹的路径和文件名。
2. PathIsDirectory函数,用来判断路径是否存在,路径的一般格式E:\\**\\**,若是存在返回1,否则返回0。
3. CreateDirectory函数,用来创建一个路径,接受两个参数,路径和安全属性,安全属性可选择0,若是创建成功则返回1,否则返回0;在创建时要保证当前路径下的每一级都是有效的,如路径若是E:\\S1\\S2\\S3,若是S1或S2不存在,则创建会失败;若是创建的文件夹存在,则CreateDirectory函数也不会在创建文件夹,也会返回0值,因而CreateDirectory函数在调用时只要没有创建文件夹,函数返回0。