2011-10-20 5 views
0

まず、状況を説明しましょう。 C#の私のアプリケーションは、PHPサーバに最新のアップデートを要求します。それはそのURLとシンプルなPOST属性のような127.0.0.1/update.php?ver=0.2を使用しています。サーバーは、バージョンが0.2以上でない場合は404、新しいバージョンがある場合は200でOK、バイナリファイルの送信を開始しますmime-type:オクテットストリーム。Cでダウンロードする前にバイナリファイルの名前を取得する

このファイルを取得することに問題はありませんが、ファイル名の取得に問題があります。このコードでは

WebClient webClient = new WebClient(); 
webClient.DownloadFile("http://127.0.0.1/update.php?ver=0.2", filename); 

私は私のファイル名を配置する必要がありますが、私はそれは、サーバー上のファイルと同じ名前を持つために何をしたい場合は?ダウンロードする前にどうすれば入手できますか?

+2

可能な複製http://stackoverflow.com/questions/4096929/get-filename-while-downloading-it –

+0

うん!あなたは正しいのですが、それは同じ問題です。ヒントのおかげで、重複して申し訳ありません。 – gawi

答えて

1

あなたがOpenRead()を使用する場合は、あなたがwebClient.ResponseHeaders["content-disposition"]の値がありますかどうかを確認し、ファイル名=「blah.blah」の部分を解析することができます。

ウェブ上のストリームの大部分はファイル名情報を持たず、送信時にファイル拡張子がコンテンツタイプに基づいて書き換えられ、そのファイル拡張子がそれが保存されているマシン。

+0

Martijn Bさんが同じソリューションをhttp://stackoverflow.com/questions/4096929/get-filename-while-downloading-itに投稿したので、ありがとうございます – gawi

1

WebClientは、このようなシナリオにはあまり適していない高水準の機能を提供するため、直接的には可能ではありません。

いくつかの方法がありますが、いずれも1つのタイプの変更が必要です。あなたは二つの部分に機能を分割することができます

  1. :(例えばDownloadStringで)1つの通話を行うが更新され、その名前が何であるかどうかを伝え、その後、コールDownloadFile得るためにここにカップルです名前を知って、それ自体を更新する。
  2. DownloadFileの利便性を放棄し、より低いレベルでHTTP要求を処理します。これを行うと、HTTP応答ヘッダーを読み取って、ファイル名の内容を示すヘッダー(たとえば、X-Save-Filename:などのヘッダーを追加することもできます)を追加できます。
+0

非常に便利で便利です - ありがとう! – gawi

+0

大部分のブラウザを含む多くのWebクライアントでコンテンツの処理がすでに理解されている場合は、X-Save-Filenameを使用しないでください。 –

関連する問題