gpt4 book ai didi

c - 如何在不使用 C 中的 "dirent.h"(visual studio 2017 windows)的情况下查找特定目录中的所有文件名

转载 作者:太空宇宙 更新时间:2023-11-04 06:47:13 24 4
gpt4 key购买 nike

我有一个期中项目,制作一个反病毒软件,它以目录和路​​径作为主要参数:该路径指向包含病毒签名的文件。反病毒的目标是扫描给定目录中的所有文件以查找病毒签名。我已经完成了整个项目,除了在特定给定目录中查找所有文件的部分。由于这个项目是由一个没有任何外部库的自动反馈系统检查的,并且在未知操作系统上运行(连我的老师都不知道,这是类(class)的系统),它有成为一个跨平台的解决方案,除了 stdio.h、stdlib.h、string.h 和 windows.h 之外不依赖任何库

几乎每个教程和示例都是使用 HANDLE(我们还没有学过,也不应该使用)或 .问题是找到一种无需 dirent 库的方法。

我需要一些函数来获取目录中的所有文件

像这样:

char** fileNames = somefunc(char* dir)

最佳答案

单靠标准库无法做到这一点;标准 C 不了解目录。不过,每个操作系统都有执行此操作的方法,因此您需要为您的检查器(Windows、Linux 等)找到操作系统系列,并查看如何为该操作系统执行此操作。

操作系统内置的库必须可用,因为它们是系统自带的。没有它们,您根本无法运行任何程序。 (这在技术上是不正确的,但它足以涵盖所有有趣的案例。)

编辑:如果您的检查器在 Windows 下运行(根据您的评论判断),您将需要使用 FindFirstFileFindNextFile。不过,它们确实依赖于句柄(就像几乎所有 Windows API 一样),所以您必须研究一下。 (句柄只是一个对 Windows 内核具有特殊意义的不透明指针。您可以将其视为 void *。不要过于关注数据类型。)

编辑 2:如果您正在寻找可以帮助您入门的东西:

char ** list_directory (const char * directory) {
char * search_path = malloc(strlen(directory) + 3);
strcpy(search_path, directory);
strcat(search_path, "\\*");
WIN32_FIND_DATA fd;
SetLastError(0);
HANDLE hsrch = FindFirstFile(search_path, &fd);
free(search_path);
if (hsrch == INVALID_HANDLE_VALUE) {
if (GetLastError() != ERROR_FILE_NOT_FOUND) return NULL;
SetLastError(0);
return calloc(1, sizeof(char *)); // no files
}
char ** result = malloc(sizeof(char *));
unsigned count = 0;
while (!GetLastError()) {
result[count] = malloc(strlen(fd.cFileName) + 1);
strcpy(result[count ++], fd.cFileName);
FindNextFile(hsrch, &fd);
result = realloc(result, (count + 1) * sizeof(char *));
}
if (GetLastError() == ERROR_NO_MORE_FILES)
SetLastError(0);
FindClose(hsrch);
result[count] = NULL;
return result;
}

关于c - 如何在不使用 C 中的 "dirent.h"(visual studio 2017 windows)的情况下查找特定目录中的所有文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56292844/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com