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.
私は何が間違っているのですか?
私はついに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
よりもはるかに役に立ちました。
EnvironmentまたはIsolatedStorageを使用する必要があります。例えば:
var path = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
var filename = Path.Combine(path, "newFile.png");
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」をチェックすると、問題は解決しました。
次の権限をAndroid.Manifestファイルに追加します
<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />
Monoを使用する場合、XamarinStudioと同じである必要があると思います。
var path = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
File.Create(path + "newFile.png");