在 Linux 中,opendir()
函數用于打開一個目錄流,以便讀取目錄中的文件和子目錄。要實現目錄過濾,您可以使用 readdir()
函數遍歷目錄,并使用 fnmatch()
函數或正則表達式來過濾所需的文件和目錄。
以下是一個簡單的示例,展示了如何使用 opendir()
、readdir()
和 fnmatch()
實現目錄過濾:
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <fnmatch.h>
#include <string.h>
int main(int argc, char *argv[]) {
if (argc != 3) {
fprintf(stderr, "Usage: %s <directory> <pattern>\n", argv[0]);
return EXIT_FAILURE;
}
const char *dir = argv[1];
const char *pattern = argv[2];
DIR *dp = opendir(dir);
if (!dp) {
perror("opendir");
return EXIT_FAILURE;
}
struct dirent *entry;
while ((entry = readdir(dp))) {
if (fnmatch(pattern, entry->d_name, 0) == 0) {
printf("%s\n", entry->d_name);
}
}
closedir(dp);
return EXIT_SUCCESS;
}
在這個示例中,程序接受兩個命令行參數:要遍歷的目錄和要匹配的模式。然后,它使用 opendir()
打開目錄,并使用 readdir()
遍歷目錄中的每個條目。對于每個條目,它使用 fnmatch()
函數檢查條目名稱是否與給定的模式匹配。如果匹配,則打印條目名稱。
要編譯此程序,請使用以下命令:
gcc -o filter_directory filter_directory.c
然后,您可以使用以下命令運行程序,其中 <directory>
是要遍歷的目錄,<pattern>
是要匹配的模式:
./filter_directory <directory> <pattern>
例如,要列出目錄中所有以 .txt
結尾的文件,您可以運行:
./filter_directory /path/to/directory "*.txt"