2011-08-02 18 views
4

私はepubファイルをオンラインでダウンロードしています。このため私はまずDirectory.CreateDirectoryを使ってディレクトリを作成し、次のコードを使ってファイルをダウンロードしました。Windows Phone 7でダウンロードしたファイルをプログラムで取得するにはどうすればよいですか?

WebClient webClient = new WebClient(); 
webClient.DownloadStringAsync(new Uri(downloadedURL), directoryName); 
webClient.DownloadProgressChanged += 
        new DownloadProgressChangedEventHandler(ProgressChanged); 
webClient.DownloadStringCompleted += 
        new DownloadStringCompletedEventHandler(Completed); 

これはファイルをダウンロードする正しい方法ですか?ダウンロードされたファイルを表示してグリッドに表示するコードは何ですか?

+0

ダウンロードしているファイルの種類は? – Waleed

+0

.epubファイルです。 – Shri

答えて

8

1)Windows PhoneでDirectory.CreateDirectoryを使用しないでください。あなたが分離ストレージ上で動作しているので、代わりに、あなたは使用する必要があります。

var file = IsolatedStorageFile.GetUserStoreForApplication(); 
file.CreateDirectory("myDirectory"); 

2)ファイルをダウンロードするWebクライアントを通じて、このように行うことができます。この場合には、直接ディレクトリを作成

WebClient client = new WebClient(); 
client.OpenReadCompleted += new OpenReadCompletedEventHandler(client_OpenReadCompleted); 
client.OpenReadAsync(new Uri("your_URL")); 


void client_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e) 
{ 
    var file = IsolatedStorageFile.GetUserStoreForApplication(); 

    using (IsolatedStorageFileStream stream = new IsolatedStorageFileStream("file.epub", System.IO.FileMode.Create, file)) 
    { 
     byte[] buffer = new byte[1024]; 
     while (e.Result.Read(buffer, 0, buffer.Length) > 0) 
     { 
      stream.Write(buffer, 0, buffer.Length); 
     } 
    } 
} 

はオプションです。ネストされたフォルダ構造でファイルを保存する必要がある場合は、ファイルパスを/Folder/NewFolder/file.epubのように設定することもできます。

3)あなたが使用することができ、分離ストレージ内のファイルを列挙する:

var file = IsolatedStorageFile.GetUserStoreForApplication(); 
file.GetFileNames(); 

ファイルがIsoStoreのルートに配置されている場合です。それらがディレクトリ内にある場合は、検索パターンを設定し、フォルダ名とファイルタイプを含めてGetFileNamesに渡す必要があります。単一のファイルごとに、次のパターンを使用できます。

DIRECTORY_NAME\*.* 
+0

ありがとう、それは出力を得るのを助けた。 – Shri

1

ファイルはありません。 DownloadStringCompletedイベント引数には、HTTPリクエストの結果である文字列を含むResultメンバーが含まれます。イベントハンドラでは、これをe.Result

というように参照できます。私はepubファイルの形式に慣れていませんが、厳密にテキストファイルでない限り、コードは正しく動作しません。

代わりに、webclient.OpenReadAsyncと対応するイベントを使用する必要があります。これは、e.Resultがバイナリデータの読み取りに使用できるストリームであることを除いて、方法論のDownloadStringAsyncに似ています。

+0

お返事ありがとうございます。私はwebclient.openreadasyncを使ってダウンロードしようとします。しかし、私の質問は、ファイルがダウンロード後に保存されているパスを取得する方法です。ダウンロードしたファイルを確認することができます。 – Shri

+0

ファイルを保存する前にファイルがありません。 1つは文字列を返し、もう1つはPeter Woneが提案したようにストリームを返します。 –

関連する問題