2011-09-20 62 views
0

當我打開文件的下一個方法: ofstream outputFile(Filename,ios :: out | ios :: binary);我想在目錄不存在時強制文件打開

我得到錯誤的結果,當不存在的目錄:

TEMP \ FILENAME.EXT

當目錄中存在它的工作以及

。 我想知道我怎麼能強迫在C++中命令

+1

你如何打開一個不存在的文件?你的代碼應該在試圖打開它之前檢查文件是否存在,如果不存在,它應該嘗試創建它,如果需要的話。 – AndrewC

+0

什麼語言? C還是C++? – Kos

回答

0

我是第一個承認我什麼都不知道關於C的操作,但在任何編程語言,試圖迫使在不一個文件打開的文件操作存在是一件壞事!

檢查您試圖打開的文件是否存在。如果沒有,請創建它。如果你不能創建它,那麼優雅地失敗。

+1

這不是文件存在與否的問題。創建文件時,這是一個不存在目錄的問題。 –

+0

事實上,您通常不會找到僅創建文件的C或C++函數(或其他大多數語言的函數)。你打開它們;如果你打開一個不存在的文件進行閱讀,這是一個錯誤。如果您打開一個不存在的_writing_文件,它將被創建。這就是你創建文件的方式。 –

2

你不能。沒有標準的方法來在C++中創建一個目錄。
你可能想看看從提升filesystem library。有多種功能用於檢查目錄/文件是否退出,以及是否如何創建它們。

+0

mkdir()適用於幾乎所有的操作系​​統(儘管Windows和Linux的語法有點不同)。 – Radu

+0

@Radu:「語法有點不同」;-)這是我沒有標準化方式的定義。 – mkaes

+0

儘管如此,它只是一些#ifdefs,所以實際上它與標準一樣接近:)當然,可以爲它制定一個宏。 – Radu

1

創建ofstream時會自動創建文件(如果不存在)。但是你想要創建這個文件的目錄必須已經存在。

無法在C++中自動創建目錄。你必須用C++創建目錄。

此外,不幸的是,沒有處理目錄的C++標準方式。您必須恢復到您的操作系統的C系統庫mkdir才能創建它。

+0

mkdir是linux文件系統應用程序。我需要用於Linux和Windows的C++或c函數。因爲您瞭解我的應用程序是跨平臺應用程序 – ifefer

+0

在Windows上,Visual C++的C運行時提供了函數'_mkdir'。界面很簡單。與使用全功能庫相比,根據平臺使用'mkdir'和'_mkdir'宏開關是輕量級的。 –

相關問題