windows客户端开发--判断一个文件夹中是否存在文件夹
2016-04-05 22:02
309 查看
我们做windows客户端,往往需要与文件夹打交道。
比如说某些特定的情况下,我们需要删除某个文件夹的子文件夹的全部内容。有时候程序执行的比较慢,我们需要判断到底是否删除了文件夹下的子文件夹呢?
换种思维,如果我们能计算出某个文件下下有多少个子文件夹呢?
FindFirstFile
函数功能描述:查找指定目录的第一个文件或目录并返回它的句柄
参数:
lpFileName
[输入] 指向字符串的指针用于指定一个有效的目录。
lpFindFileData
[输出] 指向一个WIN32_FIND_DATA的指针,用于存放找到文件或目录的信息。
返回值:
如果成功,则返回找到文件或目录的句柄。在FindNextFile和FindClose函数中会用到此句柄。
如果失败,返回INVALID_HANDLE_VALUE。要获得更多的信息调用GetLastError函数。
_WIN32_FIND_DATA
typedef struct _WIN32_FIND_DATA
{
DWORD dwFileAttributes; // 文件属性
FILETIME ftCreationTime; // 文件创建时间
FILETIME ftLastAccessTime; // 文件最后一次访问时间
FILETIME ftLastWriteTime; // 文件最后一次修改时间
DWORD nFileSizeHigh; // 文件长度高32位
DWORD nFileSizeLow; // 文件长度低32位
DWORD dwReserved0; // 系统保留
DWORD dwReserved1; // 系统保留
TCHAR cFileName[ MAX_PATH ]; // 长文件名
TCHAR cAlternateFileName[ 14 ]; // 8.3格式文件名
}WIN32_FIND_DATA, *PWIN32_FIND_DATA;
FindNextFile
判断当前目录下是否有下一个目录或文件
有了上面的基础,我们就可以写出代码了,计算指定路径下文件夹的个数。
等等,如果判断文件还是文件夹呢?
FILE_ATTRIBUTE_DIRECTORY
这个时候就可以写出完整的了:
比如说某些特定的情况下,我们需要删除某个文件夹的子文件夹的全部内容。有时候程序执行的比较慢,我们需要判断到底是否删除了文件夹下的子文件夹呢?
换种思维,如果我们能计算出某个文件下下有多少个子文件夹呢?
FindFirstFile
函数功能描述:查找指定目录的第一个文件或目录并返回它的句柄
HANDLE FindFirstFile( LPCTSTR lpFileName, // 目录名 LPWIN32_FIND_DATA lpFindFileData // 数据缓冲区 );
参数:
lpFileName
[输入] 指向字符串的指针用于指定一个有效的目录。
lpFindFileData
[输出] 指向一个WIN32_FIND_DATA的指针,用于存放找到文件或目录的信息。
返回值:
如果成功,则返回找到文件或目录的句柄。在FindNextFile和FindClose函数中会用到此句柄。
如果失败,返回INVALID_HANDLE_VALUE。要获得更多的信息调用GetLastError函数。
_WIN32_FIND_DATA
typedef struct _WIN32_FIND_DATA
{
DWORD dwFileAttributes; // 文件属性
FILETIME ftCreationTime; // 文件创建时间
FILETIME ftLastAccessTime; // 文件最后一次访问时间
FILETIME ftLastWriteTime; // 文件最后一次修改时间
DWORD nFileSizeHigh; // 文件长度高32位
DWORD nFileSizeLow; // 文件长度低32位
DWORD dwReserved0; // 系统保留
DWORD dwReserved1; // 系统保留
TCHAR cFileName[ MAX_PATH ]; // 长文件名
TCHAR cAlternateFileName[ 14 ]; // 8.3格式文件名
}WIN32_FIND_DATA, *PWIN32_FIND_DATA;
FindNextFile
判断当前目录下是否有下一个目录或文件
有了上面的基础,我们就可以写出代码了,计算指定路径下文件夹的个数。
等等,如果判断文件还是文件夹呢?
FILE_ATTRIBUTE_DIRECTORY
这个时候就可以写出完整的了:
int CountTotalFoldersInDirectory(std::wstring& path) { size_t len = _tcslen(path.c_str()); const size_t alloc_len = len + 3; TCHAR* sub_wild = new TCHAR[alloc_len]; _tcscpy_s(sub_wild, alloc_len, path.c_str()); if (len && sub_wild[len - 1] != _T('\\')) { sub_wild[len++] = _T('\\'); } sub_wild[len++] = _T('*'); sub_wild[len++] = _T('\0'); // File enumeration starts here WIN32_FIND_DATA fd; HANDLE hfind; int count = 0; if (INVALID_HANDLE_VALUE != (hfind = FindFirstFile(sub_wild, &fd))) { do { if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { // is_alias_dir is true if directory name is "." or ".." const bool is_alias_dir = fd.cFileName[0] == _T('.') && (!fd.cFileName[1] || (fd.cFileName[1] == _T('.') && !fd.cFileName[2])); count += !is_alias_dir; } } while (FindNextFile(hfind, &fd)); FindClose(hfind); } delete[] sub_wild; return count; }
相关文章推荐
- hdu 2807 The Shortest Path 优化矩阵运算+floyd
- 深度学习之Softmax回归
- 使用Nginx+FFMPEG搭建HLS直播转码服务器
- 虚析构函数 和 纯虚析构函数
- 简单的投票页面,只有一个html页面
- spring原理
- windows客户端开发--判断一个文件夹中是否存在文件夹
- LeetCode之9---Palindrome Number
- 【HNOI模拟By lyp】Day1
- 为什么总连不上--之在Linux系统下使用CLI连接Microsoft Azure 21V版本
- PHPcms首页幻灯片调用代码
- 图的邻接矩阵表示
- 图的邻接矩阵表示
- 密码学应用(DES,AES, MD5, SHA1, RSA, Salt, Pkcs8)
- UML中几种类间关系:继承、实现、依赖、关联、聚合、组合的联系与区别
- 协方差
- 使用dubbo+zookeeper创建一个小应用
- 为什么我要成为最佳(一)
- C++虚函数表详细解释及实例分析
- 数据库