我能夠創建文件,如C++ fstream的開放
f.open("file")
f.open("./path/file")
f.open("../path/file")
但不
f.open("~/path...)
f.open("/path...)
如何獲得絕對路徑的工作?
我能夠創建文件,如C++ fstream的開放
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::ofstream
std::fstream f; f.open(filename,std::ios_base::out);
隨着f.open("~/path/....")
有必要爲你展開代碼~
。通常通過調用getenv("HOME")
來檢索主目錄,並用主目錄替換路徑中'~'
的每個出現。
使用絕對路徑(例如"/path/whatever"
)時,您需要檢查f.open()
是否成功。 f.open()
有各種各樣的原因,包括訪問控制(防止打開文件的保護),文件已被另一個進程打開,目錄不存在等。
值得注意的是,f.open()
,當試圖打開目錄中的文件要求路徑中的所有目錄都已存在。它不會運用一些魔法來使它們存在。如果你想要的話,你需要編碼。請記住,每個階段(創建目錄等)可能會失敗。
'〜'是shell的解釋。這就是爲什麼這不起作用 –
'f.open(「〜/ path ...)'僅僅在shell中支持'解析$ HOME'目錄。不知道爲什麼你的第二個案件不起作用。 –