[英]C++ fstream open
我能夠創建以下文件
f.open("file")
f.open("./path/file")
f.open("../path/file")
但不是
f.open("~/path...)
f.open("/path...)
如何獲得工作的絕對路徑?
默認情況下, std::fstream::open(filename)
打開輸入和輸出的filename
。 因此,該文件必須存在,並且您必須對此文件具有寫權限。
在您的情況下:
f.open("file")
f.open("./path/file")
f.open("../path/file")
你真幸運。
在您的情況下:
f.open("~/path...")
您使用的路徑元~
,這意味着$HOME
的外殼,但只是意味着~
在C ++中。
在這種情況下:
f.open("/path...")
您很不幸:文件不存在或您沒有寫許可權。
如果您只想打開文件進行輸入,則可以:
std::ifstream
std::fstream f; f.open(filename,std::ios_base::in);
std::fstream f; f.open(filename,std::ios_base::in);
如果您只想打開文件以進行輸出,則可以:
std::ofstream
std::fstream f; f.open(filename,std::ios_base::out);
std::fstream f; f.open(filename,std::ios_base::out);
使用f.open("~/path/....")
,有必要在代碼中擴展~
。 通常,這是通過調用getenv("HOME")
來檢索主目錄並用主目錄替換路徑中每次出現'~'
完成的。
使用絕對路徑(例如"/path/whatever"
,需要檢查f.open()
成功。 f.open()
可能失敗的原因有多種,包括訪問控制(防止打開文件的保護),已經由另一個進程打開的文件,目錄不存在等。
值得注意的是,嘗試在目錄中打開文件時, f.open()
要求路徑中的所有目錄都已經存在。 使它們存在並不會產生任何魔力。 如果需要,則需要對其進行編碼。 請記住,每個階段(創建目錄等)都可能失敗。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.