如何在Xamarin跨平台项目中使用PCL支持从URL下载文件

4

我是Xamarin的新手。由于只有部分.Net程序集可用于PCL,所以遇到了很多困难。

我需要通过访问URL下载一个.db文件,并将其保存在本地驱动器中。由于该项目位于PCL中,因此我无法在项目中使用System.IO.File,这使我无法使用.NET类库中提供的文件操作。

例如:假设我正在访问URL“http://123.com/register.db”,并且该URL返回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;
    }
}

任何帮助都将不胜感激。提前感谢你 :)

你的代码并没有真正起作用:在第10行,函数Path.GetFileName()需要一个字符串参数,但是你的代码没有传入参数。 - Radinator
据我所知,PCL 没有下载和保存文件到本地存储的方式。如果您想要实现这个功能,您需要在每个平台上进行实现。 - Radinator
@Radinator请按照hVaughan3的方法进行操作,因为他已经回答了这个问题。它是有效的。您需要下载数据并将其保存到数据缓冲区中,然后使用PCL存储将其写入本地存储。 - Chiranjiv Dhal
1个回答

1

PCL代码只有API的子集可供使用。为了访问所有API,有时您需要在每个平台上编写本机代码。我建议阅读Xamarin的文件存储文章here

我还强烈建议使用PCL Storage插件,它将允许您轻松地从Xamarin Forms项目运行文件相关方法。Xamarin实际上也推荐使用此库。

要使用PCL Storage来完成您想要的操作,在所有项目中安装库后,您应该执行以下操作:

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);
}

抱歉回复晚了。但我在其他论坛上找到了解决方案并实施了它,它遵循了您提到的确切方式。我是使用HttpClient获取数据缓冲区,然后使用PCL Storage将这些文件写入本地存储器。 - Chiranjiv Dhal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接