2013-02-12 1 views
0

Я знаю, как сделать запрос, который говорит «получить файл, только если он был изменен с определенной даты».Как указать, что файл должен быть извлечен, если его длина содержимого больше локальной копии или она была изменена с тех пор?

HttpWebRequest request = (HttpWebRequest) WebRequest.create(url); 
request.IfModifiedSince = lastWriteTime; // lastWriteTime is the time when 
             // the local file was last written. 

try 
{ 
    HttpWebResponse response = (HttpWebResponse) request.GetResponse(); 
    ... 

Но предположим, что этот сценарий происходит -

локальный файл не был изменен с момента последнего времени записи, но когда он был загружен с сервера в последний раз, файл был неполным. Другими словами, длина содержимого в локальном файле не совпадает с длиной содержимого в файле на сервере.

Поэтому я хотел бы указать, что файл должен быть получен с сервера, если длина содержимого на сервере не совпадает с длиной содержимого на локальной машине.

Как это сделать?

+0

Вы хотите любой способ сделать это или вам нужно сделать это только с помощью HttpWebRequesty? – rumburak

+0

HttpWebRequest предпочтительнее. Но если нет, я знаю, как это сделать трудно! – CodeBlue

ответ

1

для вашего сценария и с HTTP только я хотел бы проверить длину файла заголовок:

 string length = response.Headers[HttpResponseHeader.ContentLength]; 

Так вы будете знать, с самого начала, что длина этого файл должен иметь. Если он слишком короткий, значит, он не является полным, и вам нужно снова загрузить его.

Если вы больше озабочены содержанием файла Вы можете также проверить MD5:

 string md5 = response.Headers[HttpResponseHeader.ContentMd5]; 

Если Вы настаиваете на запрос состояния Вы можете попробовать HTTP заголовок If-Range. Он описывается W3C как:

... неформально, его значение `, если объект не изменяется, пришлите мне часть (части), что мне не хватает; в противном случае пришлите мне всю новую сущность ». ...

Проверить Header Field Definitions и HTTP header fields, чтобы увидеть, что ваши варианты.

 Смежные вопросы

  • Нет связанных вопросов^_^