我希望我的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);
但如果我按如下方式更改文件名:
filename[0] = Path.Combine(doc, 1.ToString());
filename[1] = Path.Combine(doc, 2.ToString());
应用程序将合并确定的地址但不能在那里写入数据并抛出以下异常:
Error: Access to this address denied
我如何解决这个问题?
答案 0 :(得分:0)
我尝试使用您的代码重现该问题但不能。这告诉我问题不在你的代码中。
我虽然在模拟器上运行,但这可能只是关键区别。
当您尝试access an external storage时,请确保您在清单中设置了以下权限:
WRITE_EXTERNAL_STORAGE (writing)
READ_EXTERNAL_STORAGE (reading)
在任何情况下,您都应该考虑是否特别想要将数据放在外部SD卡上。这可能会导致没有安装一个用户的问题。相反,您可以执行以下操作来访问内部存储,如Xamarin's documentation中所述,以获取有关在文件系统上存储内容的最佳实践:
System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal)
答案 1 :(得分: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()并调用它两次。您可以使用
的其他文件夹 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);
}
}