簡體   English   中英

僅當文件存在時才使用 fstream 讀取/寫入文件

[英]Read/write file only if it exists using fstream

我正在使用 fstream 處理一個文件,我需要讀取和寫入它。 但是,即使使用 std::ios:in,如果文件不存在,它也會繼續創建:

std::fstream file("myfile.txt", std::ios::in | std::ios::out | std::ios::app);

有什么想法嗎?

提前致謝!

有不同的方法,你可以用舊的方法來做

std::fstream file("myfile.txt", std::ios::in | std::ios::out); // edited after comment
if (!file)
{
    // Can't open file for some reason
}

或者您可以使用 C++17 中引入的標准庫std::filesystem::exists 閱讀更多相關信息

if (std::filesystem::exists("myfile.txt")) { // Exists }

請記住,文件可以存在,但您可能無法與它交互(從讀取/寫入/向它寫入)。

如果需要的話:

g++ -std=c++17 yourFile.cpp -o output_executable_name

仔細閱讀文檔:

std::basic_filebuf<CharT,Traits>::open - cppreference.com

該文件的打開方式如同通過調用std::fopen並使用第二個參數 ( mode ) 確定,如下所示:

模式 openmode & ~ate 文件已存在時的操作 文件不存在時的動作
“r” 從頭開始閱讀 打不開
“w” 出,出|截斷 銷毀內容 創建新的
“一種” 應用程序,輸出|應用程序 附加到文件 創建新的
“r+” 出|入 從頭開始閱讀 錯誤
“w+” 出|入|截斷 銷毀內容 創建新的
“一個+” 出|進|應用,進|應用 寫到最后 創建新的
“rb” 二進制|輸入 從頭開始閱讀 打不開
“wb” 二進制|輸出,二進制|輸出|截斷 銷毀內容 創建新的
“ab” 二進制|應用程序,二進制|輸出|應用程序 寫到最后 創建新的
“R+B” 二進制|輸出|輸入 從頭開始閱讀 錯誤
“w+b” 二進制|輸出|輸入|截斷 銷毀內容 創建新的
“a+b” 二進制|輸出|輸入|應用,二進制|輸入|應用 寫到最后 創建新的

這應該可以解釋一切。

只需放下app標志即可完成。

https://wandbox.org/permlink/p4vLC8ane9Ndh1gN

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM