簡體   English   中英

C ++ fstream打開

[英]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.

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