opendir
和 readdir
是在 C 語言中用于遍歷目錄內容的兩個函數。它們通常一起使用來讀取目錄中的文件和子目錄。以下是這兩個函數的區別和使用場景:
opendir
函數用于打開一個目錄流,并返回一個指向 DIR
類型的指針。如果成功,該指針可以用于后續的目錄讀取操作。DIR *opendir(const char *name);
name
:要打開的目錄的路徑。DIR
對象的指針。NULL
,并設置 errno
來指示錯誤原因。readdir
函數用于從 DIR
流中讀取下一個目錄項。struct dirent *readdir(DIR *dirp);
dirp
:由 opendir
返回的 DIR
指針。struct dirent
的指針,該結構體包含目錄項的信息。NULL
。這兩個函數通常一起使用來遍歷一個目錄中的所有文件和子目錄。下面是一個簡單的示例代碼,演示如何使用 opendir
和 readdir
:
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <string.h>
int main() {
DIR *dir;
struct dirent *entry;
// 打開當前目錄
dir = opendir(".");
if (dir == NULL) {
perror("opendir");
return EXIT_FAILURE;
}
// 讀取目錄中的每個條目
while ((entry = readdir(dir)) != NULL) {
printf("%s\n", entry->d_name);
}
// 關閉目錄流
closedir(dir);
return EXIT_SUCCESS;
}
readdir
讀取到的 struct dirent
結構體中的 d_name
字段包含文件或目錄的名稱,但不包含路徑。如果需要完整路徑,可能需要將目錄名與文件名拼接起來。DIR
流后,應調用 closedir
函數關閉它,以釋放相關資源。