2017-05-12 14 views
0

にファイルを書き込みます。ここでは、Androidの内部ストレージにファイルを書き込んで、アクセスできるようにする必要があります。 Write to External Storageのアクセス権を与えましたが、ファイルを書き込もうとしたときにアクセスが拒否されました。ここでXamarinフォーム:私はXamarinフォームPCLプロジェクトを使用したクロスプラットフォームのアプリを開発していますAndroidデバイスの内部ストレージ

は、私が試したものです。この中

Java.IO.File DataDirectoryPath = Android.OS.Environment.DataDirectory; 
string dirPath = DataDirectoryPath.AbsolutePath + "/MyFolder"; 
bool exists = Directory.Exists(dirPath); 
string filepath = dirPath + "/test.txt"; 
if (!exists) 
{ 
    Directory.CreateDirectory(dirPath); 
    if (!File.Exists(filepath)) 
    { 
     File.Create(filepath).Dispose(); 
     using (TextWriter tw = new StreamWriter(filepath)) 
     { 
      tw.WriteLine("The very first line!"); 
      tw.Close(); 
     } 
    } 
} 
+0

一般的には、ファイルを保存するためのアプリのサンドボックスを使用する(およびセキュア)をお勧めします。あなたは、デバイスのストレージにしてファイルを保存する場合は代わりにあなたのファイルを簡単に削除/変更することができます... – Milen

+0

'Directory.CreateDirectory(dirPathのは);'あなたは戻り値をチェックしませんでしょうか?または、ファイルを置く前にディレクトリが存在するかどうかを確認しますか?その特定の行の – greenapps

+0

には「アクセスが拒否されました」と表示されます – Sonali

答えて

2

が、私はそれをacccessできるように、Androidの内部ストレージ内のファイルを記述する必要があります。 Write to External Storageのアクセス権を与えましたが、ファイルを書き込もうとしたときにアクセスが拒否されました。

まず、許可<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />は外部記憶装置のため、内部記憶装置のためには機能しません。あなたのコードに基づいて

Java.IO.File DataDirectoryPath = Android.OS.Environment.DataDirectory; 

あなたの書き込みのためData Directoryを使用し、このディレクトリはシステムによって所有され、それに書き込むための権限がありませんが、SOでこの問題について、いくつかの議論が、そこにいますたとえば、Data directory has no read/write permission in Android です。

回答にあるように、Android.Content.Context.FilesDir PropertyはXamarinの内部ストレージに書き込むのにgetFilesDir()を使うことができます。

アップデート:私はあなたのコードに基づいていくつかのコードを書いた

、それは例えば、同じでなければなりません:

var dirPath = this.FilesDir + "/MyFolder"; 
var exists = Directory.Exists(dirPath); 
var filepath = dirPath + "/test.txt"; 
if (!exists) 
{ 
    Directory.CreateDirectory(dirPath); 
    if (!System.IO.File.Exists(filepath)) 
    { 
     var newfile = new Java.IO.File(dirPath, "test.txt"); 
     using (FileOutputStream outfile = new FileOutputStream(newfile)) 
     { 
      string line = "The very first line!"; 
      outfile.Write(System.Text.Encoding.ASCII.GetBytes(line)); 
      outfile.Close(); 
     } 
    } 
} 

私もDDMSで、このファイルをチェックし、それが下に見ることができますフォルダ:data\data\yourAPP\files\MyFolder\test.txt

enter image description here

私はちょうどXamarin.Anをテストドロイドプロジェクトは、あなたがそれをやろうとしている場合は、ちょうどあなたのアンドロイドコンテキストに上記のコードでは単語thisを置き換え、Xamarin.FormsためDependencyServiceを使用しようとしたしませんでした。

+0

このプロパティを使用するサンプルコードはありますか。シェアしてください。 – Sonali

+0

@Sonali、私はあなたのコードに基づいていくつかのコードを書いて、私の更新された答えを確認してください。これが役に立つと分かったら、この回答に印をつけてください。 –

+1

'this'を' Android.App.Application.Context.FilesDir'に置き換えました。それが正しいか? – Sonali

関連する問題