如何使用readdir實現目錄比較

如何使用readdir實現目錄比較

readdir 是一個用于讀取目錄內容的函數,通常在 C/c++ 語言中使用。要使用 readdir 實現目錄比較,你需要遵循以下步驟:

  1. 包含必要的頭文件:
#<span>include <dirent.h></span> #<span>include <stdio.h></span> #<span>include <stdlib.h></span> #<span>include <string.h></span> 
  1. 定義一個函數來讀取目錄內容并將其存儲在一個字符串數組中:
int read_directory(<span>const char *path, char ***files)</span> {     DIR *dir = opendir(path);     if (!dir) {         perror("opendir");         return -1;     }      <span>struct dirent *entry;</span>     int count = 0;     while ((entry = readdir(dir)) != NULL) {         count++;     }     closedir(dir);      *files = (char **)malloc(sizeof(char *) * count);     if (!*files) {         perror("malloc");         return -1;     }      dir = opendir(path);     if (!dir) {         perror("opendir");         return -1;     }      int i = 0;     while ((entry = readdir(dir)) != NULL) {         (*files)[i] = strdup(entry->d_name);         i++;     }     closedir(dir);      return 0; } 
  1. 定義一個函數來比較兩個字符串數組:
int compare_directories(<span>const char **dir1, int size1, const char **dir2, int size2)</span> {     if (size1 != size2) {         return 0;     }      for (int i = 0; i < size1; i++) {         if (strcmp(dir1[i], dir2[i]) != 0) {             return 0;         }     }      return 1; } 
  1. 在 main 函數中調用這些函數來比較兩個目錄:
int main() {     char **dir1_files, **dir2_files;     int dir1_size, dir2_size;      dir1_size = read_directory("path/to/dir1", &dir1_files);     dir2_size = read_directory("path/to/dir2", &dir2_files);      if (dir1_size == -1 || dir2_size == -1) {         fprintf(stderr, "Error reading directoriesn");         return 1;     }      int result = compare_directories(dir1_files, dir1_size, dir2_files, dir2_size);      if (result) {         printf("Directories are the samen");     } else {         printf("Directories are differentn");     }      for (int i = 0; i < dir1_size; i++) {         free(dir1_files[i]);     }     free(dir1_files);      for (int i = 0; i < dir2_size; i++) {         free(dir2_files[i]);     }     free(dir2_files);      return 0; } 

這個示例程序將比較兩個目錄(path/to/dir1 和 path/to/dir2)的內容,并輸出它們是否相同。請注意,這個程序僅比較目錄中的文件和子目錄名稱,而不比較文件內容或屬性。

? 版權聲明
THE END
喜歡就支持一下吧
點贊13 分享