Son*_*ali 1 android file xamarin.android xamarin.forms
我正在使用Xamarin Forms 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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
在这里,我需要在android的内部存储中写一个文件,以便我可以访问它.我已经写入了"外部存储"权限,但是当我尝试编写该文件时,它表示拒绝访问.
首先,权限<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />是外部存储,因此它不适用于内部存储.
根据您的代码:
Java.IO.File DataDirectoryPath = Android.OS.Environment.DataDirectory;
Run Code Online (Sandbox Code Playgroud)
您用于Data Directory写作,此目录由系统拥有,并且没有写入它的权限,在SO上有关于此问题的几个讨论,例如:数据目录在Android中没有读/写权限
.
所以,正如它在答案中建议的那样,你可以getFilesDir()用来编写内部存储,在Xamarin中,它是Android.Content.Context.FilesDir属性.
更新:
我根据你的代码编写了一些代码,它应该是相同的,例如:
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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我也通过DDMS检查了这个文件,可以在文件夹下看到data\data\yourAPP\files\MyFolder\test.txt:
我只是测试Xamarin.Android项目,没有尝试使用DependencyServiceXamarin.Forms,如果你想这样做,只需将this上面代码中的单词替换为你的android上下文.
| 归档时间: |
|
| 查看次数: |
5743 次 |
| 最近记录: |