更新时间:2015-06-26 23:13:42浏览次数:1+次
创建多级目录,就是给出一个路径,如果中间含有的路径中包含多个目录,且不存在,则自动创建多级路径。
我所了解到的,可以用三种方法创建多级目录。下面分别来介绍一番。【目录和文件夹是同一个意思】BOOL WINAPI MakeSureDirectoryPathExists(PCSTR DirPath);
此函数用于创建指定的路径中所有的目录。也就是我们要的多级目录。此函数的名字叫做确保文件夹路径存在,也就是说,如果给定了文件夹,如果存在的目录则忽略,不存在的就全部创建,给定的含有多级不存在的目录都会被创建出来,保证这个给定的路径一定是存在的。此函数只有一个参数,参数的类型是PCSTR,此参数是const char *类型,表示此参数不会被函数修改。同时也表明,此参数不能是Unicode编码的字符串。使用前要将Unicode编码的字符串正确的转换为ANSII编码的字符串,否则路径就是乱码。int SHCreateDirectoryEx(HWND hwnd,LPCTSTR pszPath,const SECURITY_ATTRIBUTES *psa);
此函数有三个参数,第一个是一个窗口句柄。在创建目录时,如果路径名不可见,会用消息框提示“可能不允许访问”,如果用户选择不处理,则函数会返回ERROR_CANCELLED,表示取消。而消息框就是以传入的句柄窗口作为父窗口而弹出的。如果设置句柄为空,遇见不可见隐藏的文件夹则不提示,直接返回ERROR_CANCELLED。ERROR_BAD_PATHNAME 错误:路径参数为相对路径.
ERROR_FILENAME_EXCED_RANGE 错误:路径太长,超过了248个字符。
ERROR_PATH_NOT_FOUND 错误:系统找不到参数中的路径,错误的驱动器(盘符)。比如系统没有G盘,传入一个G盘下的路径。
ERROR_FILE_EXISTS 目录已经存在。MSDN上如此解释,但是目录真正存在返回的是ERROR_ALREADY_EXISTS。
ERROR_ALREADY_EXISTS 目录已经存在。
ERROR_CANCELLED 用户取消了操作。
此函数使用的代码示例如下:int iRetCode = SHCreateDirectoryEx(NULL,L"D:\\1\\2\\1.txt",NULL);
switch(iRetCode)
{
case ERROR_BAD_PATHNAME:MessageBox(_T("不能为相对路径"));break;
case ERROR_FILENAME_EXCED_RANGE:MessageBox(_T("路径名不能超过248个字符"));break;
case ERROR_PATH_NOT_FOUND:MessageBox(_T("驱动器(盘符)不存在"));break;
case ERROR_FILE_EXISTS:MessageBox(_T("文件已经存在"));break;
case ERROR_ALREADY_EXISTS:MessageBox(_T("已经存在"));break;
case ERROR_CANCELLED:MessageBox(_T("用户取消了操作"));break;
}
BOOL CreateMultiDirectory(CString strPath)
{
CString strSubPath;
CString strMsg;
int nCount = 0;
int nIndex = 0;
//通过“\”来分割路径,从而创建各级的目录。
do
{
nIndex = strPath.Find(_T("\\"),nIndex) + 1;
nCount++;
}while( (nIndex-1) != -1);
nIndex = 0;
//检查,并创建目录
while( (nCount-1) >= 0)
{
nIndex = strPath.Find(_T("\\"),nIndex) + 1;
if( (nIndex - 1) == -1)
strSubPath = strPath;
else
strSubPath = strPath.Left(nIndex);
if(!PathFileExists(strSubPath))// - 检查目录是否存在
{
if(!CreateDirectory(strSubPath,NULL))// -不存在则创建目录
{
strMsg.Format(_T("创建目录【%s】失败!"),strSubPath);
AfxMessageBox(strMsg,MB_OK);
return FALSE;
}
}
nCount--;
};
return TRUE;
}
相关资讯