[英]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
標志即可完成。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.