在 Linux(包括 Ubuntu)下,copendir 并不是标准 API。你可能想用的是 opendir / readdir / closedir 这一套目录操作函数。
下面给你一个完整、正确的用法示例,用 C 语言在 Ubuntu 上获取并遍历目录中的文件。
| 函数 | 作用 |
|---|---|
opendir() |
打开目录 |
readdir() |
读取目录项 |
closedir() |
关闭目录 |
struct dirent |
目录项结构体 |
#include <stdio.h>
#include <dirent.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
const char *path = "."; // 当前目录,可改为 "/home" 等
DIR *dir;
struct dirent *entry;
if (argc > 1) {
path = argv[1];
}
dir = opendir(path);
if (dir == NULL) {
perror("opendir");
return 1;
}
while ((entry = readdir(dir)) != NULL) {
printf("%s\n", entry->d_name);
}
closedir(dir);
return 0;
}
gcc listdir.c -o listdir
./listdir
./listdir /home
. 和 ..)if (entry->d_name[0] != '.') {
printf("%s\n", entry->d_name);
}
#include <sys/stat.h>
struct stat st;
stat(entry->d_name, &st);
if (S_ISDIR(st.st_mode)) {
printf("[DIR] %s\n", entry->d_name);
} else {
printf("[FILE] %s\n", entry->d_name);
}
copendiropendir 的误写DIR *dir = opendir("/path");
import os
for f in os.listdir("."):
print(f)
#include <filesystem>
for (auto &p : std::filesystem::directory_iterator(".")) {
std::cout << p.path() << std::endl;
}
如果你愿意,可以告诉我:
我可以给你更精确的代码。