Windows环境扫描目录下的文件,并输出。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
// return the acture count of item in list
int scanfile(const char *path, char **list)
{
WIN32_FIND_DATA FindFileData;
HANDLE hFind = INVALID_HANDLE_VALUE;
char DirSpec[MAX_PATH]; // directory specification
int i, count;
char *ptr;
// 设置路径
strcpy(DirSpec, path);
count = 0;
do
{
// 扫描文件夹,统计总文件个数
hFind = FindFirstFile(DirSpec, &FindFileData);
if(hFind == INVALID_HANDLE_VALUE) break;
count = 0;
do
{
count++;
} while(FindNextFile(hFind, &FindFileData) != 0);
FindClose(hFind);
// 重新扫描,以便添加到list
list[count] = NULL;
ptr = (char *)&list[count + 1];
// 扫描文件夹,统计总文件个数
hFind = FindFirstFile(DirSpec, &FindFileData);
if(hFind == INVALID_HANDLE_VALUE) break;
i = 0;
do
{
list[i] = ptr;
strcpy(ptr, FindFileData.cFileName);
i++;
ptr+= strlen(FindFileData.cFileName) + 1;
} while(FindNextFile(hFind, &FindFileData) != 0);
FindClose(hFind);
} while(0);
return count;
}
int main()
{
static char buffer[1024];
char **list = (char **)buffer;
int i, count;
count = scanfile("D:\\*.bmp", list); // 或者不指定扩展名 "D:\\*" 输出所有文件
printf("files:[%d]\n", count);
for(i = 0; i < count; i++)
{
printf("[%d]:%s\n", i, list[i]);
}
system("PAUSE");
return 0;
}
输出结果类似下面:
files:[2]
[0]:abc.bmp
[1]:def.bmp
请按任意键继续. . .