请输入您要查询的百科知识:

 

词条 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条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。

 

Copyright © 2004-2023 Cnenc.net All Rights Reserved
更新时间:2025/2/12 5:07:53