程序代码:
//--------------------------------------
// 程序功能:調用Win32功能用通配符查找一批文件的文件名
// 說明:1.採用DOS通配符,即包含*和?號的文件,比如*.c是所有以.c為擴展名的文件,可帶路徑
// 2.用命令行指定文件樣式,若省略,默認為*.*
// 3.默認將結果輸出到控制臺,若用重定向,可輸出到文本文件,語法類如為test *.c > list.txt,即寫到list.txt上
// 4.獲得文件清單,可用數組循環處理(本例是寫到標準容器vector中,相當於文件名數組)
// 5.要獲取文件的其他屬性,可查閱MSDN中WIN32_FIND_DATA結構的內容
// 6.本程序使用寬字符以及安全版本的函數,然而用重定向輸出得到的文本文件是可以用Ansi模式讀入的
//--------------------------------------
#include <Windows.h>
#include <stdio.h>
#include <string.h>
#include <vector>
BOOL GetFileList(const wchar_t FileName[], std::vector<WIN32_FIND_DATAW>& FileList);
int wmain(int argc, wchar_t* argv[])
{
wchar_t FileName[FILENAME_MAX];
wcscpy_s(FileName, FILENAME_MAX - 1, (argc < 2) ? L"*.*" : argv[1]);
std::vector<WIN32_FIND_DATAW> FileList;
FileList.clear(); // 清空集合,如果需要追加模式,重覆調用GetFileList()函數而不要再清空
if (GetFileList(FileName, FileList))
{
for (std::vector<std::wstring>::size_type index = 0; index != FileList.size(); ++index)
{
_putws(FileList[index].cFileName);
}
}
return 0;
}
// 獲取文件清單
// 備註:結果通過集合FileList返回,傳遞的是引用
BOOL GetFileList(const wchar_t FileName[], std::vector<WIN32_FIND_DATAW>& FileList)
{
WIN32_FIND_DATAW FindFileData; // 文件數據結構,類型聲明末尾為W表示是寬字符版本,若為A則是Ansi版本的
HANDLE Handle; // 用於搜索文件的句柄,將此句柄供給FindNextFile()函數,文件信息儲存在上面結構中
Handle = FindFirstFileW(FileName, &FindFileData);
if (Handle != INVALID_HANDLE_VALUE)
{
do
{
FileList.push_back(FindFileData);
} while (FindNextFileW(Handle, &FindFileData));
return true;
}
else return false;
}
[
本帖最后由 TonyDeng 于 2012-1-22 04:50 编辑 ]