2012-04-25 7 views
0

は、私が今ここに30を失敗し、Android-NDKアプリケーションの権限の問題により、fopenがネイティブメソッドで失敗するのはなぜですか?

FOPEN FAIL with 30 

を示し得る1つのネイティブコール

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 "); 

内のコードを次していること、それは私のアプリケーションでMainFestファイルでエラー

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

を示し意味見ます私はこの行を追加しました

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

まだこのエラーが発生しています。

この問題を解決するにはどうすればよいですか?


編集それは私がそのようにfopenを有する(1ライブラリを持っている私の場合でも、

作品を指定のフォルダ名で

おかげで)ここで、私は与えることができないファイル名を呼んでいます。デフォルトのファイル名になります。

私はこのライブラリを自分のndkアプリケーションで使用しています。この場合、この問題を解決する方法は?

答えて

0

yuppiは最終的に私は

は、私はこのようそして

最初の変更"/"から"/sdcard/"

chdir("/sdcard/"); 

に私のプロセスの現在のディレクトリとそれをやっているということです/ sdcard/

のパスを見つける

とすべての作業.. !!!

+0

のYaaを知っている...簡単で、時間の節約です..しかし、ディレクトリを変更してもよいですあなたのライブラリがそれらの存在を仮定してローカルファイルに対して何らかの操作を行っている場合には、問題を作成してください。あなたができることは、現在のディレクトリの場所を読み込むことです。文字列に格納し、chdirを実行し、操作を実行し、一度agdinすると古い場所にchdirを実行します。これは理想的に問題を作り出すべきではありません..すべて最高です –

+0

私はこれが現在のディレクトリを変更する倫理的な方法ではないと思っていますが、私の仕事をした後に提案してくれてありがとうございます。 ! –

1

"jigar.txt"ファイルを書き込むフォルダを指定する必要があります。このように:

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

デフォルトでは、アプリケーションを実行しているときに、それはそれ自身のコンテキストで実行されます。 fopen( "jigar.txt"、 "wb");現在のディレクトリにあるファイルを開こうとします。これは、ほとんどが/ data/..と思っています。そのようなファイルは作成できません。代わりに、/ data /内にフォルダが必要な場合は、gteDir()関数を呼び出すことができ、その内部に独自のファイルを作成することができます。これは一般的な情報です。

上記のように、別のディレクトリにファイルを作成するには絶対パスを与える必要があります。これはLinuxでも同じです。

ライブラリの場合、2つのことができます。

1)ライブラリのソースコードを変更し、NDKを使用して再度コンパイルします。変更を加えながら、アプリケーションを実行している間に渡すfopen()の引数として文字列を与えます。

2)remountライブラリがファイルを作成しているファイルシステム。次に、ファイルが作成されている特定のディレクトリにchmod 777を実行します。ここでアプリケーションを実行します。それは動作するはずです。しかし、これは一般的ではありません。あなたはいくつかのテストの目的のためにそれをやっている場合、このソリューションは、どこかで立ち往生している場合

が、私はこれはあまりにも良い解決策..です

+0

おかげで、私たちはほぼ同時に問題を解決しました。あなたの両方の提案は正しかったですが、私の仕事は私の答えを見て、デフォルトで現在のディレクトリパスは "/ data /"ではなく "/"私の理解に従っています。 –

+1

良いthtの問題が解決しました..あなたのソリューションに投稿したコメントを確認してください。その休みをちょっと気にかけて、私はすべてうまくいっています...とにかく、あなた自身の問題を解決することをお祝いします。:) –

関連する問題