SDカード以外の場所にファイルを書き込む方法はありますか?Android NDK書き込みファイル
私は、ファイルシステム上の多くの別のパスを試してみましたが、常に
はと同等の何か他のものがあります...私は/ SDカード/内部での読み出し/書き込みを任意のファイルを除いて、NULLを返す関数fopen:
ファイルシステムなどのように書くことができますか?
SDカード以外の場所にファイルを書き込む方法はありますか?Android NDK書き込みファイル
私は、ファイルシステム上の多くの別のパスを試してみましたが、常に
はと同等の何か他のものがあります...私は/ SDカード/内部での読み出し/書き込みを任意のファイルを除いて、NULLを返す関数fopen:
ファイルシステムなどのように書くことができますか?
あなたのアプリ内の2つの場所、SDCard、およびあなたのアプリ用の特別なデータディレクトリにアクセスできます。あなたがroot権限を持っていない限り、他の場所は制限されていません。
"特別なデータディレクトリ"の場所はどこですか? ?私はすべての携帯電話がSDカードを持っているわけではないと思っています。だから/ sdcard/dir。信頼できません。 TIA – bobmc
次のコマンドを使用して、ディレクトリがJavaにあるOSを問い合わせることができます。 mContext.getFilesDir(); mContext.getExternalFilesDir(null); デバイスには内部ストレージが限られている可能性があるため、大きなオブジェクトの場合は外部ストレージを優先する必要があります。 – CaseyB
私はデバイスへのルートアクセス権を持っています。ファイルシステムへのアクセス方法を教えてください。システムでファイルを開こうとしているが、私のために働いていない。これを確認してください[リンク](http://stackoverflow.com/questions/39785497/accessing-root-files-system-dev-from-a-native-library-in-android-applicatio) – Arjun
あなたのアプリが配置されているディレクトリ にいつでもアクセスできます。
このディレクトリは通常、次のとおりです。
data/data/<Your_package_name_usually com.android.appName>/files/<your_filename>
より良いアンドロイドの未来 バージョンの変更で有効なファイルパスを確保 にgetFilesDir()
を使用しています。あなたの代わりに外部ストレージ を使用したい場合は
、あなたは ゲイン許可にマニフェストのアプリのコードのこの ラインを置くことを確認してください。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
そして、SDカードのディレクトリを使用します。
getExternalStorageDirectory(); //usually : /sdcard/<your_filename>
そうでない場合、あなたはデバイス を根絶し、全体 ファイルシステムへのアクセスを得ることができます。しかし、アプリケーションを使用して の前に のすべてのアプリユーザーに のルートアクセス権を取得するようにリクエストする必要があります。いくつかのゲーム はこのやり方を使いますが、私は を勧めません。まだ としたい場合は、アンドロイドのSuperuser
アプリを参照してください。無料で を信頼できます。
これでアンドロイドディレクトリが作成されたら、jstringパラメータを受け取るJNIネイティブメソッドを作成し、ネイティブコード内に設定します。それをstd :: stringに変換すると、fopen()で使用する準備が整います。
//Inside your java activity
File f = this.getApplicationContext().getFilesDir();
LibLoader.setupArchiveDir(f.toString());
//Inside your JNI wrapper
JNIEXPORT bool JNICALL Java_com_android_appName_LibLoader_setupArchiveDir(JNIEnv * env, jobject obj, jstring dir)
{
const char* temp = env->GetStringUTFChars(dir, NULL);
std::string stringDir(temp);
// Will be receive as a std::string inside C++ code
MyNativeObjectInC++->SetupArchiveDir(stringDir);
}
編集:
あなたがてmanualyする必要があるかもしれませんが、初めてでそれを使用できるようになる前にCで/ファイルを作成します。
int result_code = mkdir("/data/data/com.app/files/", 0770)
乾杯!
'0770'のフラグ最後のコードサンプルで。 'mkdir("/data/data/com.app/databases "、S_IRWXU | S_IRWXG | S_IWOTH | S_IXOTH);'私にとってはうまくいかない:( – amin
fopen(filePath, "a+")
機能を使用する前にファイルを作成する必要があります。または使用するfopen(filePath, "a")
このリンクでは次のように答えています: –
vgokul129