語法書 / AA 競程語法書 下冊 / 第十四單元 / 檔案在哪裡?路徑與工作目錄

14.5 檔案在哪裡?路徑與工作目錄

14.2 教你把 input.txt 跟原始碼放同一個資料夾,但不少同學照做了還是 open failed。這一節把「程式到底去哪裡找檔案」一次講清楚——它是本單元最多人卡關的地方。

相對路徑與工作目錄

"input.txt" 這種寫法叫相對路徑——它只說了檔名,沒說「從哪裡開始找」。程式執行時,作業系統會指定一個工作目錄(working directory),相對路徑就從那裡開始找。

關鍵在於:工作目錄是「程式被執行時的位置」,不一定是「原始碼的位置」

  • 在終端機執行程式:工作目錄就是你目前所在的資料夾。
  • 在 Code::Blocks、VS Code 這類環境按下執行:工作目錄通常是專案(或原始碼)所在的資料夾——所以 14.2 的「放在原始碼旁邊」多數時候有效。
  • 但「通常」不是「一定」:有些環境設定會把工作目錄指到別的地方(例如放編譯產物的子資料夾),這時檔案明明就在原始碼旁邊,程式卻找不到。

絕對路徑

另一種寫法是絕對路徑:從磁碟的最頂層寫起的完整地址,例如 Linux/macOS 的 /home/you/code/input.txt、Windows 的 C:\Users\you\Desktop\input.txt。絕對路徑不管工作目錄在哪都找得到同一個檔案,是除錯時的好工具。

找不到檔案的除錯三步驟

程式讀不到檔案時,照這個順序查:

  1. 先讓程式自己說話:加上 14.2if (!fin) 檢查。先確定問題真的是「開檔失敗」,而不是檔案開成功了、資料格式不對。
  2. 換絕對路徑試一次:改用絕對路徑還是失敗,多半是檔名有問題(見第 3 步);絕對路徑開得起來,代表檔案本身沒事,是工作目錄不是你以為的那個資料夾——把檔案搬去真正的工作目錄,或測試期間乾脆用絕對路徑(反正上傳前整段都要拿掉)。
  3. 檢查副檔名有沒有被隱藏:見下方經典事故。