Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 尝试在外部存储上创建文件时,对路径的访问被拒绝_C#_Android_Xamarin.android - Fatal编程技术网

C# 尝试在外部存储上创建文件时,对路径的访问被拒绝

C# 尝试在外部存储上创建文件时,对路径的访问被拒绝,c#,android,xamarin.android,C#,Android,Xamarin.android,我希望我的android应用程序保存一个包含EditText中内容的文本文件。当我执行以下操作时,新文件将按预期方式保存: string[] filename = new string[50]; EditText et1 = FindViewById<EditText>(Resource.Id.editText1); EditText et2 = FindViewById<EditText>(Resource.Id.editText2); string doc = And

我希望我的android应用程序保存一个包含
EditText
中内容的文本文件。当我执行以下操作时,新文件将按预期方式保存:

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);
应用程序将合并确定的地址,但无法在其中写入数据,并引发以下异常:

Error: Access to this address denied

如何解决此问题?

我尝试使用您的代码重现此问题,但无法解决。这告诉我问题不在代码中

虽然我是在模拟器上运行的,但这可能正是关键的区别

当您尝试执行此操作时,请确保已在清单中设置以下权限:

WRITE_EXTERNAL_STORAGE (writing)
READ_EXTERNAL_STORAGE (reading)
无论如何,如果你特别想把数据放在外部SD卡上,你应该考虑一下。这可能会导致未安装的用户出现问题。相反,您可以执行以下操作来访问内部存储,如中所述,以获得有关在文件系统上存储内容的最佳做法:

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

您的异常是因为您忘记了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>

变量
i
设置为什么?我猜这是一个迭代器,但从你发布的图片来看还不清楚。此外,在任何情况下,您都应该通过在问题中直接包含代码来改进格式,而不是添加显示代码的图片。i是一个整数,在上面几行中确定。现在更改它并放入完整的代码。确定。以新形式plz检查它。
et
文件名
变量定义在哪里?请也包括这些内容。@Mehrdad我建议打印
filename[0]
,我认为它的值设置不正确。
<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(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);
         }
    }