2016-07-22 80 views
2

我是Xamarin的新手。面對很多困難,由於只有一小部分.Net程序集可用於PCL。如何使用PCL從xamarin跨平臺項目的URL下載文件支持

我需要通過點擊保存在本地驅動器中所需的URL來下載.db文件。由於該項目在PCL中,因此這不允許我在我的項目中使用System.IO.File,因此無法執行.Net類庫中的文件操作。例如:假設我點擊URL「http://123.com/register.db」,並返回register.db作爲響應。我需要保存register.db,因爲它在我的本地存儲中。

我的代碼打網址如下

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

任何幫助將得到高度讚賞。預先感謝您:)

+0

你的代碼是不是真的工作:在第10行的函數路徑.GetFileName()接受一個字符串,但你的代碼沒有參數。按照我研究的 – Radinator

+0

,沒有pcl的方式來下載和戴文件在本地存儲。如果你想這樣做,你必須在每個平臺上實現它 – Radinator

+0

@Radinator請按照hVaughan3的方式來執行它,因爲他已經回答了它。有用。您需要下載數據並將其保存到數據緩衝區,並使用PCL存儲將其寫入本地存儲。 –

回答

1

PCL代碼只有一個API子集可供您使用。爲了訪問所有的API,你有時必須在每個平臺上編寫本地代碼。我建議閱讀Xamarin的文件存儲文章here

我也強烈建議使用PCL Storage插件,這將允許您輕鬆地從您的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); 
} 
+0

對不起,延遲迴復。但是我確實從其他論壇找到了解決方案並實施了該解決方案,並且遵循了您提到的確切方式。我使用HttpClient獲取數據緩衝區,使用PCL Storage將這些文件寫入本地存儲 –