首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Ubuntu 新建文件夾隱藏項 `.` 和 `..` 導致遍歷刪除誤判

     編輯:程式設計綜合問答

現象

C++ 遍歷目錄刪除文件,空文件夾下 `readdir` 返回 `.`,誤以為有內容無法刪除。

原因

Linux 目錄默認包含兩個特殊條目:

  • . 指向當前目錄
  • .. 指向父目錄

它們**不是普通文件**,不可刪除,遍歷時必須過濾。

修正代碼

DIR *dir = opendir(path);
struct dirent *entry;
while ((entry = readdir(dir)) != nullptr) {
    if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0)
        continue;  // 跳過特殊項
    // 處理正常文件/子目錄
}
closedir(dir);

其他可能導致「無法刪除」

  • 隱藏文件(以 `.` 開頭,如 `.gitkeep`)。
  • 權限不足(需 root 或文件屬主)。
  • 文件被進程佔用(lsof 排查)。
  • 文件系統錯誤(fsck 修復)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved