2016-07-22 21 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をローカルストレージに保存する必要があります。 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; 
    } 
} 

以下の通りです。事前にありがとうございます:)

+0

あなたのコードが実際に動作していない:行10機能のパスに.GetFileName()は文字列を取りますが、コードにはパラメータはありません。 – Radinator

+0

私が調査したように、ローカルストレージにファイルをダウンロードして保存する方法はありません。もしあなたがこれをしたいのであれば、あなたはそれを各プラットフォームに実装しなければなりません。 – Radinator

+0

@ラジネーター彼が答えたようにhVaughan3のやり方で従ってください。できます。データをダウンロードしてデータバッファに保存し、PCLストレージを使用してローカルストレージに書き込む必要があります。 –

答えて

1

PCLコードには利用できるAPIのサブセットしかありません。すべてのAPIにアクセスするには、各プラットフォームにネイティブコードを記述する必要があります。 XamarinのFile Storage記事hereを読むことをお勧めします。

PCL Storageプラグインを使用することを強くお勧めします。このプラグインを使用すると、Xamarinフォームプロジェクトからファイル関連のメソッドを簡単に実行できます。 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を使用して、これらのファイルをローカルストレージ –

関連する問題