2012-04-25 21 views
0

看到我已經在一個本地電話由於Android-NDK應用程序的權限問題,爲什麼fopen在本地方法中失敗?

errno = 0; 

FILE *fp; 
fp = fopen("jigar.txt","wb"); 
if(fp == NULL) 
    __android_log_print(ANDROID_LOG_ERROR, APPNAME, "FOPEN FAIL with %d",errno); 
else 
    __android_log_print(ANDROID_LOG_ERROR, APPNAME, "FOPEN pass "); 

它得到失敗,並顯示以下代碼

FOPEN FAIL with 30 

現在這裏30意味着它會顯示錯誤

#define EROFS  30 /* Read-only file system */ 

在我的應用程序MainFest文件我已添加此行

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" > 

我仍然收到這個錯誤..

如何解決這個問題?


編輯

感謝由指定的文件夾名稱它的工作原理,但

在我的情況我有有這樣的fopen一個圖書館()調用其中的文件名,我不能放棄。它需要它的默認文件名。

而我在我的ndk應用程序中使用這個庫,所以在這種情況下如何解決這個問題?

回答

0

yuppi我終於得到了

我已經做了這樣

第一個變化來自"/"我進程的當前目錄"/sdcard/"

chdir("/sdcard/"); 

,然後將其尋找路徑/ sdcard/

和一切工作.. !!!

+0

雅阿這是一個很好的解決方案太..但改變目錄可能如果你的圖書館通過假設他們的存在正在對本地文件進行更多的操作,就會產生問題。你可以做的是讀取當前的目錄位置。將其存儲在一個字符串中,執行chdir,執行該操作,然後在舊的位置執行chdir到舊的位置。這不應該造成理想的問題..所有最好的 – 2012-04-25 08:17:15

+0

是的,我認爲這不是改變當前目錄的道德方式,但在完成我的工作後感謝您的建議,我會將當前目錄更改回其原始值..! ! – 2012-04-25 08:21:12

1

你應該指定文件夾在哪裏寫「jigar.txt」文件。就像這樣:

fp = fopen("/sdcard/figar.txt", "wb"); 
1

默認情況下,當您運行您的應用程序時,它運行在它自己的上下文中。的fopen( 「jigar.txt」, 「WB」);將嘗試打開當前目錄中的文件,我認爲這大部分是/ data/..所以你不能創建這樣的文件。相反,如果你想在/ data /中創建一個文件夾,你可以調用一個函數gteDir(),並在裏面創建你自己的文件。好吧,這是所有的一般信息。

即將到來的問題,如上所述,您需要給絕對路徑在不同的目錄中創建一個文件。即使在Linux中也是如此。

對於圖書館的東西,你可以做兩件事。

1)更改庫源代碼並使用NDK重新編譯它。在進行更改時,將一些字符串作爲fopen()的參數,在執行應用程序時您將傳遞它。

2)remount您的庫正在創建該文件的文件系統,然後執行chmod 777到您的文件正在創建的特定目錄。現在執行應用程序。它應該工作。但這不是通用的。如果你正在做一些測試目的那麼這個解決方案是最簡單和節省時間......

如果卡住的地方,讓我知道..

+0

嘿謝謝哥們我們幾乎同時解決了問題.. !!!你的兩個建議是正確的,但我的工作沒有看到我的答案,是的默認情況下,目前的目錄路徑不是「/ data /」,而是根據我的理解「/」。 – 2012-04-25 08:19:22

+1

不錯的問題得到解決..檢查我發佈在您的解決方案的評論。只要照顧好這個休息,我就可以輕鬆一切......無論如何恭喜你解決了自己的問題.. :) – 2012-04-25 08:22:12

相關問題