win32 API 文件夹操作函数整理

发布时间 2023-12-04 16:12:29作者: 初吻给了烟灬

常用操作文件目录的函数

1. CreateDirectory 创建文件夹

原型:

BOOL CreateDirectory(
    LPCTSTR    lpPathName,
    LPSECURITY_ATTRIBUTES    lpSecurityAttributes
);

参数说明:

lpPathName     要创建的文件夹名称
lpSecurityAttributes   忽略为NULL

返回:

  成功返回非零,失败返回零

实例:

实例:
CString str="D:\\一级文件夹";
CreteDirectory(str,NULL);
str+="\\二级文件夹";
CreateDirectory(str,NULL);

 

2.RemoveDirectory 删除文件夹

原型:

BOOL RemoveDirectory(
    LPCTSTR    lpPathName //要删除的文件夹名称
);

返回:

  成功返回非零,失败返回零

 

3. PathIsDirectory 判断文件夹是否存在

原型:

BOOL PathIsDirectory(
    LPCTSTR    lpPathName //文件夹名称
);

这个api要包含头文件(shlwapi.h)和库文件(shlwapi.lib)

 

4. 自己通过文件属性来判断文件夹是否存在

bool IsExistingDirectroy(const wchar_t* path)
{
    DWORD fa=0;
    ::SetLastError(ERROR_SUCCESS);
    //获取文件属性
    fa=::GetFileAttributesW(path);
    if(fa==INVALID_FILE_ATTRIBUTES)
    {
        //无法获取文件属性,可能是不存在
        //检查错误代码
        DWORD error=::GetLastError();
        return error != ERROR_PATH_NOT_FOUND &&
            error!=ERROR_FILE_NOT_FOUND;
    }

    return (fa & FILE_ATTRIBUTES_DIRECTORY) !=0;
}

 

5. GetFullPathName 获得文件或文件夹的全路径

原型:

DWORD GetFullPathNameW(
  [in]  LPCWSTR lpFileName, 	//文件/文件夹名称
  [in]  DWORD   nBufferLength,	//缓存大小
  [out] LPWSTR  lpBuffer,		//缓存指针
  [out] LPWSTR  *lpFilePart		//NULL
);

返回值:
	成功返回字符串长度,
	失败返回0;

 

实例:

实例:
WIN32_FIND_DATA wfd;
HANDLE hFile = FindFirstFile(TEXT("*.*"), &wfd);

if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) 
{ //是文件夹
    hItem = TreeView_InsertItemEx(hTree, wfd.cFileName, hParent, 1, 2);
    
    //获取文件夹的完全路径名称
    TCHAR pullPath[MAX_PATH] = { 0 };
    GetFullPathName(wfd.cFileName, MAX_PATH, pullPath, 0);

    TreeView_LoadDir(hTree, wfd.cFileName, hItem);
    SetCurrentDirectory(L"..");

}
else {
    //获取文件的完全路径名称
    TCHAR pullPath[MAX_PATH] = { 0 };
    GetFullPathName(wfd.cFileName,MAX_PATH, pullPath, 0);

    hItem = TreeView_InsertItemEx(hTree, wfd.cFileName, hParent, 0, 0);
}