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

C 語言刪除文件完整教程:remove 函數實戰與錯誤處理

     編輯:程式設計綜合問答

核心函數

C 標準庫提供 int remove(const char *pathname) 刪除文件,成功返回 0,失敗返回 -1 並設置 errno。

標準示例代碼

#include 
#include   // for perror

int main(void) {
    char filename[260]; // MAX_PATH 兼容
    printf("請輸入要刪除的文件名(含路徑):");
    if (fgets(filename, sizeof(filename), stdin) == NULL) {
        fprintf(stderr, "輸入讀取失敗\n");
        return EXIT_FAILURE;
    }
    // 去除 fgets 讀取的換行符
    size_t len = strlen(filename);
    if (len > 0 && filename[len - 1] == '\n')
        filename[len - 1] = '\0';

    if (remove(filename) == 0) {
        printf("成功刪除:%s\n", filename);
    } else {
        perror("刪除失敗"); // 自動輸出 errno 對應的錯誤信息
    }
    return EXIT_SUCCESS;
}

關鍵改進點

  • 棄用 gets:gets 不檢查緩衝區長度,極易導致緩衝區溢出,C11 已移除。改用 fgets。
  • 處理換行符:fgets 會保留 \n,必須手動截斷。
  • 使用 perror:自動輸出系統錯誤描述(如 "No such file or directory"、"Permission denied"),比自定義錯誤碼更友好。
  • 返回標準退出碼:EXIT_SUCCESS/EXIT_FAILURE 增強可移植性。

跨平台注意事項

平台行為差異應對
Windows 文件被佔用時刪除失敗,errno=EACCES 確保文件句柄已關閉,或使用 MoveFileEx 延遲刪除
Linux/Unix 刪除目錄需 rmdir,remove 僅限文件 目錄刪除用 rmdir 或遞歸刪除封裝
權限不足 非所有者/無寫權限返回 EACCES 檢查 access(filename, W_OK) 預判

擴展:批量刪除/通配符支持

C 標準庫無通配符刪除,需結合 dirent.h (POSIX) 或 FindFirstFile (Windows) 遍歷匹配後逐個 remove。

總結

C 語言刪除文件核心是 remove(),配合 fgets 安全輸入、perror 友好報錯、標準退出碼,即構成生產級代碼。切記:永遠不要使用 gets。

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