2013-11-03 74 views
4

我們的計算機科學老師給了我們一個項目,使用C++製作一個功能齊全的控制檯應用程序。我已經開始做到了。但是我在某個時候被卡住了。我想用open()函數打開一個可編輯文本(.txt)文件。但是我爲所有文本文件製作了一個單獨的文件夾。所以我知道我必須在open()函數中提供一個完整的目錄名稱,在我的情況下是「F:\ My Work \ C++ \ My School Project \ Text Files」。但是,如果我將「我的學校項目」文件夾複製到pendrive中,並將其帶到朋友家中,並嘗試在他的計算機上運行程序,該怎麼辦?它會工作嗎?我的意思是他沒有必要在'F'目錄中有'我的工作'文件夾,或者他可能沒有'F'磁盤。所以在這種情況下,地址將會改變。那麼,我必須輸入open()函數的哪個地址,以便每次嘗試在其他計算機上運行該程序時,該程序都可以在每臺計算機上運行,​​而不必更改open()函數中的地址......源代碼可能有助於解釋...謝謝!如何打開該文件?

+4

最後有人承認問題是針對學校項目的,並且表明他已經試圖找出解決方案! +1。 – smoore4

+2

在C或C++中沒有「open()」函數。最好這是一個依賴於平臺的底層函數,您應該使用標準庫文件處理函數(例如'fopen()')。 –

回答

3

而不是使用絕對路徑,你應該使用相對路徑。當您從一個文件夾運行程序時,這是您的工作路徑。然後,您可以通過僅將文件名或文件夾和文件名傳遞到打開的函數來打開此文件夾或此文件夾的子文件夾中的文件。因此,不要打開C:\...只需打開someFolder\someFile.txt

2

你可以考慮讓你在解析作爲命令行參數的部分文件名,如:

int main(int arg, char* args[]) { 

    FILE *newfile = fopen(args[1], "r"); 

} 

你不能確保所有計算機都具有F:驅動器映射正確所以最好使用 通用命名約定(UNC)名稱,即「\ server \ share \ path \ file」。

實現此目的的一個好方法是使用Boost文件系統,但這會讓你的代碼更復雜,因爲你依賴於外部庫(閱讀:學生可能會感到困惑)。在這裏找到Boost Filesystem的文檔:http://www.boost.org/doc/libs/1_43_0/libs/filesystem/doc/index.htm