问题描述
fmntr.c:
#include <time.h>
#include <stdio.h>
#include <io.h>
// defined in io.h
/*struct _finddata_t
{
unsigned attrib;
size_t time_create;
size_t time_access;
size_t time_write;
_fsize_t size;
char name[_MAX_PATH];
};
*/
enum {
FMNTR_SHOW_SYstem_FILES = 0b1,FMNTR_SHOW_HIDDEN_FILES = 0b10,};
void iter_files(char *path,int flags) {
struct _finddata_t finddata;
intptr_t const handle = _findfirst(path,&finddata);
if (handle == -1)
{
fprintf(stderr,"iter_files(): path \"%s\" is invalid.\n",path);
return;
}
int print_title = 1;
do {
if (finddata.attrib & _A_SYstem && !(flags & FMNTR_SHOW_SYstem_FILES)) continue;
if (finddata.attrib & _A_HIDDEN && !(flags & FMNTR_SHOW_HIDDEN_FILES)) continue;
if (print_title) {
printf("%-20s%15s%15s%15s%15s%15s\n","FILE NAME","SIZE","ATTRIB","CREATED","ACCESSED","WRITTEN");
print_title = 0;
}
printf("%-20s%15d%15d%15d%15d%15d\n",finddata.name,finddata.size,finddata.attrib,finddata.time_create,finddata.time_access,finddata.time_write);
} while (_findnext(handle,&finddata) == 0);
_findclose(handle);
}
void main(int argc,char *argv[]) {
if (argc < 2) {
fprintf(stderr,"Usage: fmntr <path>\n");
return;
}
iter_files(argv[1],0);
}
_findfirst() 运行良好,但 _findnext() 总是返回 -1,因此该程序只能获取目录的第一个文件。
我的命令行:
D:\ws\c>a .
FILE NAME SIZE ATTRIB CREATED ACCESSED WRITTEN
c 0 16 1626182137 1626240328 1626240328
D:\ws\c>a .\*
FILE NAME SIZE ATTRIB CREATED ACCESSED WRITTEN
a.exe 374891 32 1626240328 1626240328 1626240328
D:\ws\c>a d:\ws\c
FILE NAME SIZE ATTRIB CREATED ACCESSED WRITTEN
c 0 16 1626182137 1626240328 1626240328
D:\ws\c>a d:\ws\c\*
FILE NAME SIZE ATTRIB CREATED ACCESSED WRITTEN
a.exe 374891 32 1626240328 1626240328 1626240328
D:\ws\c>a d:\ws\c\*.*
FILE NAME SIZE ATTRIB CREATED ACCESSED WRITTEN
a.exe 374891 32 1626240328 1626240328 1626240328
D:\ws\c>a d:\ws\c\a.exe
FILE NAME SIZE ATTRIB CREATED ACCESSED WRITTEN
a.exe 374891 32 1626240328 1626240328 1626240328
D:\ws\c>a d:\ws\c\compose.c
FILE NAME SIZE ATTRIB CREATED ACCESSED WRITTEN
compose.c 1462 32 1626182302 1626232744 1626186199
D:\ws\c>a d:\ws\c\fmntr.c
FILE NAME SIZE ATTRIB CREATED ACCESSED WRITTEN
fmntr.c 1945 32 1626229513 1626240306 1626240306
D:\ws\c>
如您所见,即使我使用了通配符,它也只打印了一个文件信息。
我已经调试过了,_findfirst()
总是成功(一旦路径有效),但 _findnext()
总是失败。
操作系统:Windows 10 64 位; 编译器:TDM-GCC 64 位。
编辑:问题已解决。命令行将“.*”解释为文件路径字符串列表。因此 argv[1] 是“a.exe”,argv[2] 是“compose.c”,...
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)