OVH Cloud OVH Cloud

Pb de date avec Wininet

17 réponses
Avatar
PendLoup
Bonjour,

J' utilise le code suivant pour récupérer la date d'un fichier sur un
serveur FTP :

CFtpFileFind FtpFileFind(m_pFtpConnection);
CTime TimeFile;
CString szTime;

if (FtpFileFind.FindFile(szFtpFile))
{
FtpFileFind.FindNextFile();
FtpFileFind.GetLastWriteTime(rStatus.m_mtime);
rStatus.m_size = FtpFileFind.GetLength();
TimeFile = rStatus.m_mtime;
szTime = TimeFile.Format("%d/%m/%y %H:%M:%S");
}

Sur certains postes clients , j'ai un pb dedate . Pour des fichiers datés
d'aujourd'hui je récupère
2004 plus un décalage de 2 h. Ex :

25/07/2005 16:30 : je récupère 25/07/2004 18:30

Quelqu'un peut m'aider ?

Merci

Pendloup
--
Enlevez NoSpam de mon adresse pour me répondre

7 réponses

1 2
Avatar
Yalbrieux
Il y a un autre souvenir qui me revient :
Les fichiers les plus anciens ne sont pas datés de la même façon. Je crois
que l'heure disparaît lorsque l'ancienneté excède l'année.
Essayez "ls -l" ou "ls -t" pour voir.
Yves
Avatar
PendLoup
effectivement, on constate que les fichiers qui ont une date sont antèrieurs
à 2005. Par contre ça veut dire que la fonction FtpFindFirstFile() se
trompe, car elle me donne 2004 au lieu de 2005.

Merci.
Pendloup.
--
Enlevez NoSpam de mon adresse pour me répondre
Avatar
Cyrille Szymanski
"PendLoup" wrote in
news:dc7a55$6d0$:

Moi aussi, mais à d'autres moments de la journée , j'obtiens la
bonne date
et la bonne heure pour un même fichier. Je pense que le pb vient donc
de FtpFindFirstFile .



Non pas du tout, le problème ne vient pas de FtpFindFirstFile(), WinInet
ou quoi que ce soit d'autre. Encore une fois, FTP ne permet pas d'obtenir
de façon fiable les dates/heures et vous n'y pouvez absolument rien. Vous
avez vous-même cité ce point.

En général, en réponse à une commande LIST une implémentation de serveur
FTP renvoie le résultat d'une commande "dir" ou "ls" dont le format
dépend largement du système.

1. Comparer l'heure locale à celle d'un serveur pour en déduire des
choses est en général une très mauvaise idée car les horloges n'ont
aucune raison d'être synchronisées.

2. Il existe déjà des protocoles de synchronisation de fichiers, tels
rsync, cvsup... Ils ont l'avantage d'être incrémentaux et optionnellement
compressés. Il est probablement inutile de réinventer la roue.

3. Dans une certaine mesure, le protocole HTTP permet d'obtenir des infos
fiables.

4. En dernier recours vous pouvez toujours trouver une paire API client
FTP / version serveur FTP qui garantisse l'exactitude des résultats et
décider de ne supporter que cette configuation.

Perso je choisirais la solution 2.

--
Cyrille Szymanski
Avatar
Christian ASTOR
Cyrille Szymanski wrote:

> Non pas du tout, le problème ne vient pas de FtpFindFirstFile(),
WinInet
ou quoi que ce soit d'autre.



Sûr ?

KB284455, voire KB306587 CE ?
Avatar
Pendloup
Bonjour,

Bon, avec votre aide et à force de chercher, les choses sont plus
claires maintenant. J'ai bien compris comment ftp donne les dates en
fonction du fait que le fichier est de l'annnée en cours ou pas.
Pour les fichiers de l'année, wininet calcule bien 2005 pour les
fichiers n'ayant pas l'année et antèrieurs à la date courante.
Mon pb vient du fait que j'ai 2 heures de décalage entre le serveur
et l'heure que considère wininet. Ce qui fait que les fichiers se
trouvant dans ces 2 heures sont considérés comme étant de 2004. Si
j'attends que les 2 heures passent il sont bien datés de 2005.
Me reste plus qu' à comprendre d'où viennent ces 2 heures.

Merci à vous.

Pendloup.
Avatar
Pendloup
C'est encore moi !

Bon j'ai toujours ce pb de 2 heures.
J'explique :

Pour tout fichier se trouvant dans un intervale de 2h par rapport à
l'heure courante de mon PC, Wininet trouve une heure supèrieure d'au
plus 2 heures à l'heure courante, et donc en déduit qu 'il est de
2004.

Pax ex. , soit toto.jpg sur le serveur avec le date 28 Juillet 13:15.
Il est 13:20 sur mon PC. Wininet me retourne 28/07/2004 13:15.
Si j'avance mon PC de 2 heure, soit 15:20, Wininet me retourne
28/07/2005 13:15.

J'ai essayé de modifier la variable _timezone, ça ne change rien.
Or quand j'appelle FtpFindFirstFile() je n'ai fait encore aucune
conversion type localtime.

Une solution serait d'attendre 2 heure pour refaire une mise à jour
du serveur, et c'est ce qui se passera généralement, mais tout de
même
ce n'est pas terrible.

J'aurai aimé tester la fonction FtpCommand(), mais elle n'est dispo
que pour windows CE. Y a t'il une autre fonction que je puisse utiliser
pour envoyer moi-même une commande ftp ?

Merci de m'aider encore, je suis coincé.

Pendloup.
Avatar
Cyrille Szymanski
Christian ASTOR wrote in
news:42e7dc35$0$305$:

Non pas du tout, le problème ne vient pas de FtpFindFirstFile(),
WinInet ou quoi que ce soit d'autre.



Sûr ?

KB284455, voire KB306587 CE ?



Ah.. ça m'apprendra à dire des bêtises.

Je suis peut-être borné, mais je ne comprends toujours pas pourquoi
chercher à bricoler quelque chose qui par essence sera bancal ? Pourquoi
chercher plus loin ?

--
Cyrille Szymanski
1 2