あなたのローカルファイルの。チェックサムは、衝突の可能性が非常に高い(つまり、同じチェックサムを持つ異なるファイル)ため、この操作には適していません。
ほとんどのストレージサービス(Azure Blobストレージ、Amazon S3、CloudFiles)は、実際にファイルのMD5またはSHAハッシュをETagとして使用します。この値は、キャッシュおよび同時実行の目的でファイルへの変更を検出するために使用されます。通常、ファイルのHEAD操作は、ヘッダーとETag値を返します。
独自のアルゴリズムを選択するオプションがある場合は、これらのアルゴリズムが高度に最適化されているため、大きなファイルサイズの計算ハッシュがはるかに高速であるため、SHA256以上を選択してください。 SHA256は、実際には古いMD5アルゴリズムよりもはるかに高速です。
どのストレージサービスを使用していますか?
EDIT
あなただけそれらを再度ダウンロードを避けるために、ファイルをチェックしたい場合は、直接のETagを使用することができます。 ETagはこの目的のために作られました。初めてダウンロードするときにファイルと一緒に保存するだけです。これは、プロキシとキャッシュが、宛先サーバーにヒットするのではなく、キャッシュされたバージョンの画像を送信する方法を知っています。
実際には、ETag/If-None-Matchヘッダーを使用してファイルに対してGETを実行するだけです。宛先ファイルが変更されていない場合、中間プロキシと最終Webサーバーは304ステータスコードを返します。これにより、リスト内のすべてのイメージをダウンロードするために必要なリクエスト数が半分になります。
代替は、ファイルのためのLast-Modifiedヘッダの値を格納し、あなたはETagヘッダがnullであることを言及GET
EDIT 2
に場合 - 変更-Sinceヘッダを使用することで、あなたのコードはあなたの検索方法を示していません。
HttpResponseMessageには複数のヘッダープロパティ(on the message itselfとそのContent)があります。適切なプロパティを使用してETag値を取得する必要があります。
また、Fiddlerを使用してサーバーが実際にETagを返すことを確認することもできます。
EDIT 3
が最後にYouTubeのからのETagを取得する方法を発見しました!答えは "How to get thumbnail of YouTube video link using YouTube API?"
ytimg.com
からYouTubeサムネイルでHEADまたはGETを実行しても、ETagまたはLast-Modifiedヘッダーは返されません。
一方、YouTubeのデータAPIを使用し、gdata.youtube.com
でGETを実行すると、動画に関する豊富な情報が返されます。 ETag値が含まれていますが、ビデオが変更されるたびに変更されると思われます。ただし、ビデオが変更されたときにのみイメージをダウンロードしたい場合や、もう一度イメージをダウンロードしたくない場合は、これで問題はありません。
私が使用したコードがした
var url = "http://gdata.youtube.com/feeds/api/videos/npvJ9FTgZbM?v=2&prettyprint=true&alt=json";
using(var client = new HttpClient())
{
var response = await client.GetAsync(url);
var etag1 = response.Headers.ETag;
var content = await response.Content.ReadAsStringAsync();
...
}
どのストレージサービスを使用していますか?ほとんどのサービスは並行処理の目的でハッシュを使用しますが、それらを取得する方法は異なる場合があります –
問題のファイルはyoutubeビデオのサムネイルです –
[2つのファイルが同じかどうかを判断する最も良い方法は?](http://stackoverflow.com/questions/714574/best-way-to-tell-if-two-files-that-same)を使用して、また、あなたの質問は、あなたが問題を理解していることを示していないオンライナーです(ファイルを比較する方法を研究したのはなぜですか? – CodeCaster