2016-12-28 18 views
0

EditTextの内容のテキストファイルをAndroidアプリに保存します。次のように私が行うと予想されるように、新たにファイルが保存されます。外部ストレージにファイルを作成しようとしたときに拒否されたパスへのアクセス

string[] filename = new string[50]; 
EditText et1 = FindViewById<EditText>(Resource.Id.editText1); 
EditText et2 = FindViewById<EditText>(Resource.Id.editText2); 
string doc = Android.OS.Environment.ExternalStorageDirectory.AbsolutePath; 
filename[0] = Path.Combine(doc, "Text1"); 
filename[1] = Path.Combine(doc, "Text2"); 
File.WriteAllText(filename[0], et1.Text); 
File.WriteAllText(filename[1], et2.Text); 

しかし、次のように、私は、ファイル名を変更した場合:

filename[0] = Path.Combine(doc, 1.ToString()); 
filename[1] = Path.Combine(doc, 2.ToString()); 

アプリが決定したアドレスを結合しますが、それはデータを書き込むことはできません次の例外がスローされます。

Error: Access to this address denied 

どのようにこの問題を解決できますか?

+0

で他のフォルダを使用することができますか?私はiteratorだと思いますが、あなたが投稿した写真からは明らかではありません。また、いずれの場合でも、コードを示す画像を追加する代わりに、コードを直接質問に含めることで、書式を改善する必要があります。 – Demitrian

+0

iは整数で、上の行で決定します。それを変更して、完全なコードを入力します。 – Mehrdad

+0

ok.新しい形式のplzでチェックしてください。 – Mehrdad

答えて

0

あなたのコードを使用して問題を再現しようとしましたが、できませんでした。これは問題があなたのコード内にないことを私に伝えます。

私はちょうど重要な違いかもしれないエミュレータで動作していましたが、

あなたは access an external storageにしようとしているとき、あなたはあなたのマニフェストに次の権限が設定されていることを確認してください:あなたは、具体的にデータを配置したい場合はどのような場合には

WRITE_EXTERNAL_STORAGE (writing) 
READ_EXTERNAL_STORAGE (reading) 

、あなたが本当に考慮すべきです外付けSDカード。そのため、インストールされていないユーザーに問題が発生する可能性があります。代わりに、ファイルシステム上の格納内容に関してのベストプラクティスのためにXamarin's documentationに書かれたように、内部ストレージにアクセスするために、以下のように行うことができます。

System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal) 
0

あなたは、あなたのAndroidMnaifestでアクセス許可を忘れてしまったため、例外があります.xml:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="yournamespace"> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
    <application .../> 
</manifest> 

メソッドwriteText()を作成して2回呼び出すことができます。あなたの変数が `に設定されてi`何

string path = Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryDownloads).AbsolutePath;

 writeText(et1.Text, "Text1.txt"); 
     writeText(et2.Text, "Text2.txt"); 

    void writeText(string text, string name) { 
     string path = Environment.GetFolderPath(Environment.SpecialFolder.Personal); 
     string filename = Path.Combine(path, name); 

     using(var streamWriter = new StreamWriter(filename, true)) { 
      streamWriter.Write(text); 
     } 
    } 
関連する問題