词条 | MakeSureDirectoryPathExists |
释义 | 函数原型BOOL MakeSureDirectoryPathExists( PCSTR Dirpath ); 函数作用该函数的作用是检查指定目录是否存在,如果不存在则创建整个Dirpath所表示的整个目录。 参数Dirpath:要检查的目录名。如果是路径不是文件名,需以 '\\' 结尾。 返回值如果目录存在,返回TRUE;如果不存在但全部路径创建成功,返回TRUE; 如果不存在且创建失败,返回FALSE。 函数使用一次性建立多级目录(用CreateDirectory只能一级一级的建立)。 如: MakeSureDirectoryPathExists( "c:\\\\a\\\\b\\\\ "); 如果a文件夹不存在也可以创建成功。 这个函数并不存在于 Kernel32.dll 中,需要链接 dbghelp.lib。 该函数的实现如下,以供使用和学习。 LPTSTR _tCharAlloc(UINT uSize) { return (LPTSTR)malloc(sizeof(TCHAR) * uSize); } VOID _tCharFree(LPVOID p) { free(p); } #define IMAGEAPI WINAPI BOOL IMAGEAPI MakeSureDirectoryPathExists(LPCTSTR pszDirPath) { LPTSTR p, pszDirCopy; DWORD dwAttributes; // Make a copy of the string for editing. __try { pszDirCopy = (LPTSTR)_tCharAlloc(lstrlen(pszDirPath) + 1); if(pszDirCopy == NULL) return FALSE; lstrcpy(pszDirCopy, pszDirPath); p = pszDirCopy; // If the second character in the path is "\\", then this is a UNC // path, and we should skip forward until we reach the 2nd \\ in the path. if((*p == TEXT('\\\\')) && (*(p+1) == TEXT('\\\\'))) { p++; // Skip over the first \\ in the name. p++; // Skip over the second \\ in the name. // Skip until we hit the first "\\" (\\\\Server\\). while(*p && *p != TEXT('\\\\')) { p = CharNext(p); } // Advance over it. if(*p) { p++; } // Skip until we hit the second "\\" (\\\\Server\\Share\\). while(*p && *p != TEXT('\\\\')) { p = CharNext(p); } // Advance over it also. if(*p) { p++; } } else if(*(p+1) == TEXT(':')) // Not a UNC. See if it's <drive>: { p++; p++; // If it exists, skip over the root specifier if(*p && (*p == TEXT('\\\\'))) { p++; } } while(*p) { if(*p == TEXT('\\\\')) { *p = TEXT('\\0'); dwAttributes = GetFileAttributes(pszDirCopy); // Nothing exists with this name. Try to make the directory name and error if unable to. if(dwAttributes == 0xffffffff) { if(!CreateDirectory(pszDirCopy, NULL)) { if(GetLastError() != ERROR_ALREADY_EXISTS) { _tCharFree(pszDirCopy); return FALSE; } } } else { if((dwAttributes & FILE_ATTRIBUTE_DIRECTORY) != FILE_ATTRIBUTE_DIRECTORY) { // Something exists with this name, but it's not a directory... Error _tCharFree(pszDirCopy); return FALSE; } } *p = TEXT('\\\\'); } p = CharNext(p); } } __except(EXCEPTION_EXECUTE_HANDLER) { // SetLastError(GetExceptionCode()); _tCharFree(pszDirCopy); return FALSE; } _tCharFree(pszDirCopy); return TRUE; } |
随便看 |
|
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。