2014-06-10 73 views
-1

我必須做一個簡單的任務。我必須打開一個目錄中的文件。我在src中有.c文件,當我編譯時,我將程序(a.out)移動到bin目錄中。我想讀取目錄資產中的文件。所有這些文件夾都位於主文件夾中。在另一個目錄中打開文件

如果我這樣做

FILE* fp = fopen("../asset/team_list", "r"); 

它不會打開該文件。爲什麼我無法打開該目錄中的文件?

+0

可能重複http://stackoverflow.com/questions/2925241/how-to-open-a-text-file-thats-not-in-the-same-folder?rq=1 –

+0

@ Amk,錯誤在說什麼?如果使用perror函數發現錯誤 – Kalanidhi

+0

正如在副本中所述,'fopen'是*相對於'cwd' *。在這種情況下,如果你不這樣做,你很可能會升級('..')。 **如果情況不是這樣**,那麼你的問題不包含足夠的信息來回答它(老實說,它已經沒有)。 – usr2564301

回答

0

想你忘了把你的文件

FILE* fp = fopen("../asset/team_list.doc", "r"); 
+0

如果我添加.doc或.txt擴展名,它不起作用 – Astinog

+0

@Amk相對文件名是相對於當前工作目錄而言的,它可能不是可執行文件所在的位置。當你運行你的程序時你在哪個目錄下? – nos

0

的擴展查找您開始使用什麼樣的錯誤錯誤消息的PERROR /明確提及,並期望從計算器一個可能的答覆。

  • 請確保您指出正確的目錄,其中正在執行的程序所在的PWD中存在該文件。
0

相對路徑與進程的當前工作目錄相關,可能與二進制文件位置不同。因此,如果您位於/home/user/且運行./project/bins/my.exe,那麼當前的工作目錄是/home/user/,相對路徑需要相對於該位置。

你可以嘗試一些事情來解決這個問題。首先,打開失敗後,您可以檢查errno以查看打開失敗的原因,是否爲權限,無效路徑?

或者,您可能有權訪問strace程序,這會跟蹤系統調用,如應用程序中的open,並允許您查看失敗的系統調用。嘗試strace ./project/bins/my.exe,你會看到很多輸出,通過這個尋找失敗的公開呼叫,並試圖找出爲什麼這是失敗的,再次errno將包括在跟蹤中,以幫助理解失敗。

最後,你可以只給getcwd添加調用您的程序,並打印出結果(輔助調試),這將當前的工作目錄到緩衝區中,這樣的事情:

char buffer [PATH_MAX + 1]; 
getcwd (buffer, PATH_MAX + 1); 
printf (buffer); 
相關問題