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

C++ 檢查文件是否存在且不創建文件的正確方法

     編輯:程式設計疑難解答

問題

`fstream file; file.open(filename, ...)` 如何設置模式使文件不存在時不創建,僅檢查存在性?

標準 C++ 方案 (C++17 推薦)

#include <filesystem>
bool exists = std::filesystem::exists(filename);

C++11/14 方案

#include <fstream>
bool exists = std::ifstream(filename).good(); // 僅讀打開,不創建
// 或
struct stat buffer;
bool exists = (stat(filename.c_str(), &buffer) == 0); // POSIX/Windows 通用

錯誤回答分析

原最佳回答給出 `File.Exists(path)`,這是 **C#/.NET** 的 API,非 C++。請注意語言標籤區分。

fstream 打開模式說明

模式組合行為
`std::ios::in`讀取,文件不存在失敗 (不創建)
`std::ios::out`寫入,文件不存在**創建**,存在則截斷
`std::ios::app`追加,文件不存在**創建**
`std::ios::in \| std::ios::out`讀寫,文件不存在失敗 (不創建)

若需「打開讀寫、不存在則創建」用 `std::ios::in | std::ios::out | std::ios::trunc` (會創建/截斷) 或分兩步:先 `exists` 判斷,再決定模式。

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