windows 遍历文件夹
来源:互联网 发布:linux ssh连接数限制 编辑:程序博客网 时间:2024/05/16 03:23
下面是msdn 关于文件管理板块的链接
https://msdn.microsoft.com/en-us/library/windows/desktop/aa364229(v=vs.85).aspx#
对于遍历文件夹我们需要下面的函数
HANDLE WINAPI FindFirstFile( _In_ LPCTSTR lpFileName, _Out_ LPWIN32_FIND_DATA lpFindFileData);
lpFileName
需要的查找文件名或者目录。ANSI 版本最多支持MAX_PATH 长。Unicode 版本前面加上 “\?\”去掉限制(从 Windows 10, version 1607开始有方法可以让win32文件和目录方法不添加”\?\”前缀也能去掉限制,
https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx)。
该参数不能是nullptr,无效字符串(空的或者不是\0结尾的),反斜杠(/)结尾的字符串。但是可以使用可以使用通配符(*)。
lpFindFileData
一个指向WIN32_FIND_DATA 的指针。该机构存储这找到的文件或者文件夹信息
返回值
失败的话函数返回INVALID_HANDLE_VALUE 。可以通过GetLastError 获得更多信息
注意:
如果向访问一个目录(文件夹中的所有目录)我们可以使用通配符,如C:\Windows*
如果想访问一个文件或者文件夹 可以这样使用C:\Windows千万不要加\不然会函数一定会失败。
函数在遍历文件目录时,多线程的程序可能可能会在不停的添加和删除文件。所以函数不保证文件遍历的实时性
如果32编写的程序在可能运行在64位系统,请在调用函数之前调用也写别的函数.如 Wow64DisableWow64FsRedirection
如果路径是一个符号链接(symbolic link),lpFindFileData就是关于符号链接的信息
函数返回一个可以给FindNextFile 使用的句柄,在不需要时情调用 FindClose来释放而不是CloseHandle.
案例
#include <windows.h>#include <tchar.h> #include <stdio.h>#include <strsafe.h>#pragma comment(lib, "User32.lib")void DisplayErrorBox(LPTSTR lpszFunction);int _tmain(int argc, TCHAR *argv[]){ WIN32_FIND_DATA ffd; LARGE_INTEGER filesize; TCHAR szDir[MAX_PATH]; size_t length_of_arg; HANDLE hFind = INVALID_HANDLE_VALUE; DWORD dwError=0; // If the directory is not specified as a command-line argument, // print usage. if(argc != 2) { _tprintf(TEXT("\nUsage: %s <directory name>\n"), argv[0]); return (-1); } // Check that the input path plus 3 is not longer than MAX_PATH. // Three characters are for the "\*" plus NULL appended below. StringCchLength(argv[1], MAX_PATH, &length_of_arg); if (length_of_arg > (MAX_PATH - 3)) { _tprintf(TEXT("\nDirectory path is too long.\n")); return (-1); } _tprintf(TEXT("\nTarget directory is %s\n\n"), argv[1]); // Prepare string for use with FindFile functions. First, copy the // string to a buffer, then append '\*' to the directory name. StringCchCopy(szDir, MAX_PATH, argv[1]); StringCchCat(szDir, MAX_PATH, TEXT("\\*")); // Find the first file in the directory. hFind = FindFirstFile(szDir, &ffd); if (INVALID_HANDLE_VALUE == hFind) { DisplayErrorBox(TEXT("FindFirstFile")); return dwError; } // List all the files in the directory with some info about them. do { if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { _tprintf(TEXT(" %s <DIR>\n"), ffd.cFileName); } else { filesize.LowPart = ffd.nFileSizeLow; filesize.HighPart = ffd.nFileSizeHigh; _tprintf(TEXT(" %s %ld bytes\n"), ffd.cFileName, filesize.QuadPart); } } while (FindNextFile(hFind, &ffd) != 0); dwError = GetLastError(); if (dwError != ERROR_NO_MORE_FILES) { DisplayErrorBox(TEXT("FindFirstFile")); } FindClose(hFind); return dwError;}void DisplayErrorBox(LPTSTR lpszFunction) { // Retrieve the system error message for the last-error code LPVOID lpMsgBuf; LPVOID lpDisplayBuf; DWORD dw = GetLastError(); FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dw, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf, 0, NULL ); // Display the error message and clean up lpDisplayBuf = (LPVOID)LocalAlloc(LMEM_ZEROINIT, (lstrlen((LPCTSTR)lpMsgBuf)+lstrlen((LPCTSTR)lpszFunction)+40)*sizeof(TCHAR)); StringCchPrintf((LPTSTR)lpDisplayBuf, LocalSize(lpDisplayBuf) / sizeof(TCHAR), TEXT("%s failed with error %d: %s"), lpszFunction, dw, lpMsgBuf); MessageBox(NULL, (LPCTSTR)lpDisplayBuf, TEXT("Error"), MB_OK); LocalFree(lpMsgBuf); LocalFree(lpDisplayBuf);}
- 遍历文件夹windows
- windows遍历文件夹
- windows下文件夹遍历
- windows遍历文件夹代码
- windows 遍历文件夹
- windows编程之文件夹遍历
- Windows平台 C++遍历文件夹
- c++ windows文件夹的遍历
- Windows遍历指定文件夹及统计信息
- C Windows 读取文件夹 遍历文件
- windows中遍历指定文件夹下的所有子文件夹
- Windows 遍历文件夹下所有文件和文件夹
- windows中遍历指定文件夹下的所有子文件夹
- windows 遍历文件夹及子文件夹的所有
- windows中遍历指定文件夹下的所有子文件夹
- 遍历文件夹
- 遍历文件夹
- 遍历文件夹
- 关于Integer类和Long类对值的缓存问题
- java异常类子类和父类的关系
- 代码干货|零基础学Python,送你一份吊炸天的学习步骤与规划
- 获取Cocos Studio制作的层
- android是什么意思
- windows 遍历文件夹
- Polygon Map Generation demo
- 粒子特效
- PHP 数组玩法
- 三目运算符的使用? :
- python学习查漏补缺
- 打印金字塔
- G
- element.querySelector() 和 element.querySelectorAll()