none
Web serveur file date RRS feed

  • Question

  • Bonjour,

    J'ai des fichiers csv à ma disposition tous les matins sur un serveur web et je les télécharge avec un WebClient avec la méthode DownloadString

    J'aimerais connaitre les attributs date et heure des fichiers comme s'ils étaient sur un pc avec les classes DirectoryInfo ou FileInfo

    Est-ce possible ?

     


    fred
    mardi 26 juillet 2011 13:06

Réponses

  • Bonjour,

    Essayez de voir ce que donne une requête HEAD (http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html, section 9.4). Normalement cela retourne exactement les mêmes infos qu'un get sans le contenu du fichier ce qui devrait permettre de récupérer le "last-modified".

    Une requête avec un "If-Modified-Since" pourrait aussi permettre de demander directement au serveur de ne récupérer le fichier que si il est plus récent que la date indiquée (j'imagine que c'est le but final, c'est mieux de toujours donner une idée de l'objectif général au cas ce qui permet parfois de suggérer d'autres directions). Pour cette piste voir par exemple du côté de http://msmvps.com/blogs/alunj/archive/2010/02/21/1758864.aspx.

     

     


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    • Marqué comme réponse fred75 mercredi 27 juillet 2011 13:08
    mardi 26 juillet 2011 17:56
    Modérateur

Toutes les réponses

  • Bonjour,

    Essayez de voir ce que donne une requête HEAD (http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html, section 9.4). Normalement cela retourne exactement les mêmes infos qu'un get sans le contenu du fichier ce qui devrait permettre de récupérer le "last-modified".

    Une requête avec un "If-Modified-Since" pourrait aussi permettre de demander directement au serveur de ne récupérer le fichier que si il est plus récent que la date indiquée (j'imagine que c'est le but final, c'est mieux de toujours donner une idée de l'objectif général au cas ce qui permet parfois de suggérer d'autres directions). Pour cette piste voir par exemple du côté de http://msmvps.com/blogs/alunj/archive/2010/02/21/1758864.aspx.

     

     


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    • Marqué comme réponse fred75 mercredi 27 juillet 2011 13:08
    mardi 26 juillet 2011 17:56
    Modérateur
  • Bonjour,

    oui Patrice, c'est le but de récupérer le fichier seulement s'il est récent

    Je vais jeter un oeil aux liens

     


    fred
    mardi 26 juillet 2011 22:06
  • Merci Patrice,

    C'est génial

    ça marche nickel

    Voici mon code si certains veulent l'utiliser:

    using System;
    using System.Net;
    using System.IO;
    
    namespace cs_httpWebRequest_IfModifiedSince
    {
      class Program
      {
        static void Main(string[] args)
        {
          Uri myUriFile1 = new Uri("http://webserver/repo/file1.csv");
          Uri myUriFile2 = new Uri("http://webserver/repo/file2.csv"); 
          Uri myUriFile3 = new Uri("http://webserver/repo/file3.csv"); 
          //DateTime today = DateTime.Now;
          getDateWebFile(myUriFile1);
          getDateWebFile(myUriFile2);
          getDateWebFile(myUriFile3);
          Console.ReadKey();
        }
    
        private static void getDateWebFile(Uri myUri)
        {
          HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(myUri);
          HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
          Console.WriteLine(getFileName(myUri.ToString()) + " was modified on " + myHttpWebResponse.Headers[myHttpWebResponse.Headers.Count - 2].ToString());
          myHttpWebResponse.Close();
        }
    
        private static string getFileName(string LongCheminFichier)
        {
          return Path.GetFileName(LongCheminFichier);
        }
      }
    }
    



    fred
    mercredi 27 juillet 2011 13:07
  • Bonjour,

    Pour moi on récupère ici la date du fichier que l'on a effectivement téléchargé. Si on veut récupérer la date il faudrait faire une requête HEAD (ici on est en GET la différence est que GET récupère le contenu tandis que HEAD envoie la même chose SAUF le contenu). Egalement  lire le header par sa position est dangereux car la position des headers n'est pas fixée une fois pour toute, utiliser plutôt le nom

    Si on veut modifier le IfModifiedSince comme semble l'indiquer le nom de la fonction, il manque la ligne "myHttpWebRequest.IfModifiedSince = MaDate; " permettant de le fixer.


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    mercredi 27 juillet 2011 13:22
    Modérateur
  • Bonjour,

    Oui Patrice, maintenant que la date est récupérée, il suffit de récupérer son fichier si la date nous convient.

    Dans la doc, il y a un exemple mais j'ai gardé ce que j'avais besoin.

     


    fred
    jeudi 28 juillet 2011 09:44
  • Ce que je voulais dire c'est qu'il me semble que ce code récupère *déjà* le contenu du fichier et non pas seulement son "en-tête" (dont la date). Donc si on se base là dessus pour ensuite le récupérer on va en fait le récupérer deux fois.

    Le deuxième lien que j'avais indiqué était plutôt qq chose comme (donc avec une ligne en plus qui définit le "IfModifiedSince") :

      const string uri = "http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html";
          Uri myUri = new Uri(uri);
          HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(myUri);
          myHttpWebRequest.IfModifiedSince = DateTime.Now.AddDays(-30000);
          HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
          myHttpWebResponse.Close();

    Ce qui va marcher. Si je mets par contre -10 au lieu de -30000 cela va me retourner une exception avec un statut 304 non modifié (que je peux récupérer par un try/catch) pour signaler que le fichier n'a pas changé pendant ces 10 derniers jours.


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    jeudi 28 juillet 2011 15:49
    Modérateur
  • OK merci Patrice pour ces précisions

     


    fred
    jeudi 28 juillet 2011 18:57