我必須做一個簡單的任務。我必須打開一個目錄中的文件。我在src中有.c文件,當我編譯時,我將程序(a.out)移動到bin目錄中。我想讀取目錄資產中的文件。所有這些文件夾都位於主文件夾中。在另一個目錄中打開文件
如果我這樣做
FILE* fp = fopen("../asset/team_list", "r");
它不會打開該文件。爲什麼我無法打開該目錄中的文件?
我必須做一個簡單的任務。我必須打開一個目錄中的文件。我在src中有.c文件,當我編譯時,我將程序(a.out)移動到bin目錄中。我想讀取目錄資產中的文件。所有這些文件夾都位於主文件夾中。在另一個目錄中打開文件
如果我這樣做
FILE* fp = fopen("../asset/team_list", "r");
它不會打開該文件。爲什麼我無法打開該目錄中的文件?
的擴展查找您開始使用什麼樣的錯誤錯誤消息的PERROR /明確提及,並期望從計算器一個可能的答覆。
相對路徑與進程的當前工作目錄相關,可能與二進制文件位置不同。因此,如果您位於/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);
可能重複http://stackoverflow.com/questions/2925241/how-to-open-a-text-file-thats-not-in-the-same-folder?rq=1 –
@ Amk,錯誤在說什麼?如果使用perror函數發現錯誤 – Kalanidhi
正如在副本中所述,'fopen'是*相對於'cwd' *。在這種情況下,如果你不這樣做,你很可能會升級('..')。 **如果情況不是這樣**,那麼你的問題不包含足夠的信息來回答它(老實說,它已經沒有)。 – usr2564301