如何使用PCL支持从xamarin跨平台项目中的URL下载文件
本文关键字:URL 下载 文件 项目 跨平台 PCL 何使用 支持 xamarin | 更新日期: 2023-09-27 17:58:09
我是Xamarin的新手。由于只有一小部分.Net程序集可用于PCL,因此面临许多困难。
我需要通过点击一个保存在本地驱动器中所需的URL来下载一个.db文件。由于项目在PCL中,因此这不允许我在项目中使用System.IO.File,因此使我无法执行.Net类库中可用的文件操作。
例如:假设我正在点击URL"http://123.com/register.db"并返回register.db作为响应。我需要将register.db保存为本地存储中的状态。
我点击URL的代码如下
public static async Task LaunchURLForSync(string targetUrl)
{
try
{
using (HttpClient client = new HttpClient())
{
using (HttpResponseMessage response = await client.GetAsync(targetUrl, HttpCompletionOption.ResponseHeadersRead))
using (Stream streamToReadFrom = await response.Content.ReadAsStreamAsync())
{
string fileToWriteTo = Path.GetFileName();
using (Stream streamToWriteTo = File.Open(fileToWriteTo, FileMode.Create)) // This doesn't work with PCL for ex. FIle.Open etc
{
await streamToReadFrom.CopyToAsync(streamToWriteTo);
}
}
}
}
catch (Exception ex)
{
throw ex;
}
}
如有任何帮助,我们将不胜感激。提前感谢:)
PCL代码只有一个子集的API可供您使用。为了访问所有的API,有时必须在每个平台中编写本机代码。我建议在这里阅读Xamarin的文件存储文章。
我还强烈建议使用PCL存储插件,这将使您能够轻松地从Xamarin Forms项目中运行与文件相关的方法。Xamarin实际上也推荐这个图书馆。
要使用PCL存储来执行您想要的操作,在所有项目中安装库后,您将执行以下操作:
IFile file = await folder.CreateFileAsync("myfile.abc", CreationCollisionOption.ReplaceExisting);
byte[] buffer = new byte[100];
using (System.IO.Stream stream = await file.OpenAsync(FileAccess.ReadAndWrite)) {
stream.Write(buffer, 0, 100);
}