用于列出目录文件的 C 代码不起作用
C code for listing files of a directory is not working
我正在使用 Windows 10 平台并使用 VS buildtools 编译了以下 C 代码。该代码尝试在给定位置列出 file/folders。编译很顺利,但我没有得到想要的结果。程序写入消息 'Listing files ...',等待一段时间后退出。我在这里做错了什么?
#include <stdio.h>
#include <windows.h>
#include <string.h>
int main(int argc, char* argv[]){
HANDLE fhandle;
WIN32_FIND_DATAA* file_details;
int next_file = 1;
char* path = strcat(argv[1], "/*");
printf("Listing files for %s\n", path);
fhandle = FindFirstFileA(path, file_details);
if(fhandle != INVALID_HANDLE_VALUE){
while(next_file){
printf("%s\n", file_details->cFileName);
next_file = FindNextFileA(fhandle, file_details);
}
}
else{
printf("Error!");
}
FindClose(fhandle);
return 0;
}
有两个问题。
首先,你不能通过char* path = strcat(argv[1], "/*");
将连接的字符串分配给path
,因为argv[1]
是一个const char *
。
其次,当你使用WIN32_FIND_DATAA*
时,它没有内存space,因此无法获取返回的数据。
这里是修改后的例子:
#include <stdio.h>
#include <windows.h>
#include <string.h>
int main(int argc, char* argv[]) {
HANDLE fhandle;
WIN32_FIND_DATAA* file_details = (WIN32_FIND_DATAA*)malloc(sizeof(WIN32_FIND_DATAA));
memset(file_details, 0, sizeof(WIN32_FIND_DATAA));
int next_file = 1;
char path[100];
strcpy(path, argv[1]);
strcat(path, "/*");
printf("Listing files for %s\n", path);
fhandle = FindFirstFileA(path, file_details);
if (fhandle != INVALID_HANDLE_VALUE) {
while (next_file) {
printf("%s\n", file_details->cFileName);
next_file = FindNextFileA(fhandle, file_details);
}
}
else {
printf("Error!");
}
free(file_details);
FindClose(fhandle);
return 0;
}
输出:
我正在使用 Windows 10 平台并使用 VS buildtools 编译了以下 C 代码。该代码尝试在给定位置列出 file/folders。编译很顺利,但我没有得到想要的结果。程序写入消息 'Listing files ...',等待一段时间后退出。我在这里做错了什么?
#include <stdio.h>
#include <windows.h>
#include <string.h>
int main(int argc, char* argv[]){
HANDLE fhandle;
WIN32_FIND_DATAA* file_details;
int next_file = 1;
char* path = strcat(argv[1], "/*");
printf("Listing files for %s\n", path);
fhandle = FindFirstFileA(path, file_details);
if(fhandle != INVALID_HANDLE_VALUE){
while(next_file){
printf("%s\n", file_details->cFileName);
next_file = FindNextFileA(fhandle, file_details);
}
}
else{
printf("Error!");
}
FindClose(fhandle);
return 0;
}
有两个问题。
首先,你不能通过char* path = strcat(argv[1], "/*");
将连接的字符串分配给path
,因为argv[1]
是一个const char *
。
其次,当你使用WIN32_FIND_DATAA*
时,它没有内存space,因此无法获取返回的数据。
这里是修改后的例子:
#include <stdio.h>
#include <windows.h>
#include <string.h>
int main(int argc, char* argv[]) {
HANDLE fhandle;
WIN32_FIND_DATAA* file_details = (WIN32_FIND_DATAA*)malloc(sizeof(WIN32_FIND_DATAA));
memset(file_details, 0, sizeof(WIN32_FIND_DATAA));
int next_file = 1;
char path[100];
strcpy(path, argv[1]);
strcat(path, "/*");
printf("Listing files for %s\n", path);
fhandle = FindFirstFileA(path, file_details);
if (fhandle != INVALID_HANDLE_VALUE) {
while (next_file) {
printf("%s\n", file_details->cFileName);
next_file = FindNextFileA(fhandle, file_details);
}
}
else {
printf("Error!");
}
free(file_details);
FindClose(fhandle);
return 0;
}
输出: