首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

C語言獲取目錄文件名:system+DIR命令配合fgets解析

     編輯:關於C

核心思路

Windows 下無標準 C 庫直接讀取目錄,可借助 system() 執行 DIR 命令導出文件列表到臨時文件,再用 fgets() 逐行讀取。

關鍵 DIR 參數

命令作用
DIR顯示目錄詳細信息
DIR /B僅顯示純文件名(無摘要)
DIR /B >> file.txt追加輸出到文件
DEL /Q file.txt靜默刪除文件

完整範例:獲取指定目錄最後一個文件名

#include 
#include 

int main() {
    FILE *fp = NULL;
    char save[100] = {0};

    // 導出 E:\Ock\DirSave 下文件名到 D:\buf.Ock
    system("dir /b E:\\Ock\\DirSave >> D:\\buf.Ock");

    fp = fopen("D:\\buf.Ock", "rb");
    if (fp) {
        while (!feof(fp)) {
            fgets(save, sizeof(save), fp);  // 循環讀取,最後留下最終行
        }
        fclose(fp);
    }

    // 清理臨時文件
    system("del /Q D:\\buf.Ock");

    puts(save);  // 輸出最後一個文件名
    return 0;
}

動態獲取路徑

可從 main(int argc, char **argv) 的 argv[0] 獲取程式所在路徑,自行截取目錄部分:

int main(int argc, char **argv) {
    puts(argv[0]);  // 完整程式路徑
    return 0;
}

DIR /B 輸出示意

DIR輸出

注意事項與替代方案

  • 平台相依:僅限 Windows,Linux/Unix 應用 opendir/readdir (POSIX)。
  • 安全性:system() 存在命令注入風險,路徑含空格需加引號。
  • 效率:建立進程與文件 I/O 開銷大,高性能場景請用平台原生 API(FindFirstFile/FindNextFile)。
  • 臨時文件衝突:固定文件名易衝突,建議用 tmpnam() 或 GetTempFileName() 生成唯一名。

總結

利用 system("DIR /B ...") 配合 fgets() 可快速原型實現目錄遍歷,但生產代碼建議使用平台原生目錄 API 以獲得更好性能、安全性與可移植性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved