如何在 Xamarin.Android 中将文件保存到外部源(SD 卡)?
有一个任务来保存文件,以便以后用户可以在设备上和应用程序之外使用这个文件。不幸的是,这违反了 iOS 政策,所以不可能在那里,但正因为如此,Android 在 Xamarin 中也受到限制
下面的代码正在将文件保存在专用目录中。但是这个目录对用户是隐藏的,你不能使用这些文件。
public class FileWorker_Android : IFileWorker
{
public Task DeleteAsync(string filename)
{
// удаляем файл
File.Delete(GetFilePath(filename));
return Task.FromResult(true);
}
public Task<bool> ExistsAsync(string filename)
{
// получаем путь к файлу
string filepath = GetFilePath(filename);
// существует ли файл
bool exists = File.Exists(filepath);
return Task<bool>.FromResult(exists);
}
public Task<IEnumerable<string>> GetFilesAsync()
{
// получаем все все файлы из папки
IEnumerable<string> filenames = from filepath in Directory.EnumerateFiles(GetDocsPath())
select Path.GetFileName(filepath);
return Task<IEnumerable<string>>.FromResult(filenames);
}
public async Task<string> LoadTextAsync(string filename)
{
string filepath = GetFilePath(filename);
using (StreamReader reader = File.OpenText(filepath))
{
return await reader.ReadToEndAsync();
}
}
public async Task SaveTextAsync(string filename, string text)
{
string filepath = GetFilePath(filename);
using (StreamWriter writer = File.CreateText(filepath))
{
await writer.WriteAsync(text);
}
}
// вспомогательный метод для построения пути к файлу
string GetFilePath(string filename)
{
return Path.Combine(GetDocsPath(), filename);
}
// получаем путь к папке MyDocuments
string GetDocsPath()
{
return Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
}
}
从Android文档中,所有使用外部源(SD 卡)的工作都是通过 进行的Environment.getExternalStoragePublicDirectory,但是在 XamarinEnvironment中没有这样的方法
尽管如此,有这样一个方法,只是它不是那么容易得到它)它在命名空间中。要访问此方法,您需要当前类中的命名空间与Android项目中的MainActivity.cs匹配 。
namespace NameOfProject.Droid然后这段代码就可以工作了