商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > readdir与其他编程语言的文件操作对比

readdir与其他编程语言的文件操作对比

  发布于2026-07-26 阅读(0)

扫一扫,手机访问

说到 C 语言里遍历目录,readdir 绝对是绕不开的核心函数。它是 POSIX 标准的一部分,所以在 Linux、macOS 这类 Unix-like 系统上,它就是目录操作的“标配”。当然,它从来不是单打独斗——通常要跟 opendirclosedir 以及 dirent 结构体配合,才能把目录里的文件和子目录一个个揪出来。

readdir与其他编程语言的文件操作对比

直接上代码,一个最朴素的例子:

#include 
#include 
#include 

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;
}

这段代码虽然简单,但背后的逻辑跟所有高级语言是相通的:打开目录、读取条目、关闭目录。只不过 C 语言暴露的是最底层的系统调用接口,而其他语言通常把它们包装得更顺手。

来看看几个主流语言是怎么干的——你会发现,抽象层次高了,写法确实更省心。

Python

Python 提供了两种主流方式,os.listdirpathlib.Path.iterdir,都很直观。

import os
# 使用 os 模块
for entry in os.listdir('.'):
    print(entry)

# 使用 pathlib 模块
from pathlib import Path
for entry in Path('.').iterdir():
    print(entry.name)

Ja va

Ja va 从 1.7 开始推荐 ja va.nio.file 包,配合 DirectoryStream 来遍历目录,比传统的 File.listFiles() 更灵活。

import ja va.nio.file.*;
import ja va.io.IOException;

public class ListDirectoryContents {
    public static void main(String[] args) throws IOException {
        Path dir = Paths.get(".");
        try (DirectoryStream stream = Files.newDirectoryStream(dir)) {
            for (Path entry : stream) {
                System.out.println(entry.getFileName());
            }
        }
    }
}

Ja vaScript (Node.js)

Node.js 的 fs.readdir 是异步的,回调风格。当然也可以用 fs.promises 的同步版本。

const fs = require('fs');
const path = require('path');

fs.readdir(path.join(__dirname, '.'), (err, files) => {
    if (err) {
        return console.error(err);
    }
    files.forEach(file => {
        console.log(file);
    });
});

Ruby

Ruby 的 Dir.glob 非常简洁,支持通配符模式,一行搞定。

Dir.glob('./*').each do |entry|
    puts entry
end

PHP

PHP 的 scandir 直接返回一个数组,简单粗暴。

$files = scandir('.');
foreach ($files as $file) {
    echo $file . "\n";
}

回头看看,每种语言都在做同一件事:打开目录、读取条目、关闭目录。高级语言提供了更丰富的错误处理和更优雅的语法,而 C 语言的 readdir 则让你离操作系统更近一步——理解它,其实也就理解了所有语言目录操作的本质。

本文转载于:https://www.yisu.com/ask/27523599.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注