web-dev-qa-db-ja.com

XamarinでAndroid)にファイルを作成できません

Android用のXamarin-Studioアプリがあり、ファイルをダウンロードしてローカルに保存したいだけです。しかし、filesフォルダーにファイルを作成しようとすると、例外:

File.Create("data/data/com.company.app/files/newFile.png");

私に与える:

System.UnauthorizedAccessException
Access to the path 'data/data/com.company.app/files/newFile.png' is denied.

私は何が間違っているのですか?

11
codingFriend1

私はついにFile.create()が問題ではないことに気づきました。私はこのようなコードを持っていました:

_string tmpFilePath = FilesDir.AbsolutePath.stringByAppendingPath (f.Path);
Java.IO.File tmpFile = new Java.IO.File( tmpFilePath);
tmpFile.Mkdirs ();
_

それでも、Mkdirs()は、私が想定したように、すべての中間ディレクトリを作成するだけでなく、ファイルパス自体にもディレクトリを作成します。そのため、同じ名前のディレクトリがすでに存在するため、ファイルを作成できませんでした。正しい方法は次のとおりです。

_string tmpFile = FilesDir.AbsolutePath.stringByAppendingPath (f.Path);
Java.IO.File tmpParentFolder = new Java.IO.File(tmpFile).getParentFile();
tmpParentFolder.Mkdirs ();
_

私の弁護では、FileExistsAndIsDirectory例外はUnauthorizedAccessExceptionよりもはるかに役に立ちました。

2
codingFriend1

EnvironmentまたはIsolatedStorageを使用する必要があります。例えば:

var path = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
var filename = Path.Combine(path, "newFile.png");
16
SKall

XamarinをVS2013でコーディングしています。作成しているアプリケーションで作成されたディレクトリに対して、アクセス拒否エラーが発生しました。私のアプリケーションは、以下を介して連結することにより、/storage/emulated/0/POIAppというディレクトリを作成します。

System.IO.Path.Combine(Android.OS.Environment.ExternalStorageDirectory.Path, "POIApp");

アプリケーション(POIApp)の「プロパティ」を編集するには、VS2013を使用する必要があることがわかりました。つまり、ソリューションエクスプローラーでプロジェクトアイコンを右クリックします。ポップアップメニューからプロパティを選択します。 VS2013のメインウィンドウに新しいタブが表示されます。左側にはいくつかの選択肢があります。たとえば、アプリケーション、Androidマニフェスト、Androidオプション、ビルドなど。「Androidマニフェスト」を選択します。下部にあります。メインパネルの「必要な権限」のセクションです。「READ_EXTERNAL_STORAGE」と「WRITE_EXTERNAL_STORAGE」をチェックすると、問題は解決しました。

7
user3784130

次の権限をAndroid.Manifestファイルに追加します

<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />

3
Usha V

Monoを使用する場合、XamarinStudioと同じである必要があると思います。

var path = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
File.Create(path + "newFile.png");
1
Jorgesys