Page 1 sur 1
[R] Récupérer la version d'un fichier sur le net
Posté : jeu. 12 févr. 2015 21:23
par Bayo
Bonjour,
Est-il possible de récupérer la version d'un exe (fait en autoit) qui se trouve sur le net sans le télécharger(heberger sur googledrive et partagé), j'ai trouvé inetgetinfo qui me dit la taille du fichier mais je voudrai sa version pour, si elle est plus grande, que mon logiciel se mette à jour. Filegetversion n'arrive pas à récupérer la version.
Merci.
Cordialement.
Re: [..]Récupérer la version d'un fichier sur le net
Posté : jeu. 12 févr. 2015 21:25
par jguinch
Si c'est toi qui stocke le fichier sur le cloud, tu devrais te créer un fichier de référence qui te donne la version du fichier. Juste un fichier .txt (ou autre) que tu lis avec InetRead.
Sans ça, je crains que ça ne soit pas gagné...
Re: [..] Récupérer la version d'un fichier sur le net
Posté : jeu. 12 févr. 2015 21:50
par Bayo
ok ben avec InetRead, ca me va, oui je vais creer un fichier texte, c'est parfait merci
Re: [R] Récupérer la version d'un fichier sur le net
Posté : ven. 13 févr. 2015 11:19
par ZDS
Bonjour,
Je sais bien que le sujet est [R]ésolu, mais plus qu'un fichier txt, pour ma part je me suis plutôt orienté vers un fichier XML, ainsi je peux gérer le multi-versions et aussi plusieurs programmes à mettre à jour. A part ça sur le principe, c'est le même qu'avec INetRead :
► Afficher le texteScript
Code : Tout sélectionner
Local $XML = ObjCreate("Microsoft.XMLDOM"), $path="http://mon.site.fr/updates.xml"
If IsObj($XML) Then
Local $webdata = _INetGetSource($path)
If Not @error Then
$XML.LoadXml($webdata)
Local $updates = $XML.SelectNodes("/donnees/update")
If Not @error And IsObj($updates) Then
For $update In $updates
Local $infos = $update.GetAttribute("id") & " (" & $update.GetAttribute("short") & " / " & $update.GetAttribute("version") & ") : " & $update.GetAttribute("path")
ConsoleWrite($infos & @CRLF)
Next
EndIf
EndIf
Else
; Impossible de créer la structure XML
EndIf
► Afficher le texteFichier XML
Code : Tout sélectionner
<?xml version="1.0" encoding="ISO-8859-1"?>
<donnees type="release">
<update id="naio" version="2.0.1.0" short="2.0a" path="http://mon.site.fr/updates/exe.zip"/>
<update id="sources" version="2.0.1.0" short="2.0a" path="http://mon.site.fr/updates/src.zip"/>
<update id="modules" version="1.5.0.0" short="1.5" path="http://mon.site.fr/updates/modules.zip"/>
</donnees>
Et puis, vu que c'est pratique de comparer des versions (courtes au format ?.?x), ça peut toujours servir :
Code : Tout sélectionner
; Comparaison de numéros de versions
Func compareVersion($version1, $version2)
Local $resultat = 0, $no_version = "0.0", $pattern = "^([0-9]+)\.([0-9]+)([a-z]?)$"
If Not StringRegExp($version1, $pattern) Then $version1 = $no_version
If Not StringRegExp($version2, $pattern) Then $version2 = $no_version
If $version1 = $version2 Then Return 0
If $resultat = 0 Then $resultat = Int(StringRegExpReplace($version1,$pattern,"$1")) - Int(StringRegExpReplace($version2,$pattern,"$1"))
If $resultat = 0 Then $resultat = Int(StringRegExpReplace($version1,$pattern,"$2")) - Int(StringRegExpReplace($version2,$pattern,"$2"))
If $resultat = 0 Then $resultat = Asc(StringRegExpReplace($version1,$pattern,"$3")) - Asc(StringRegExpReplace($version2,$pattern,"$3"))
Return $resultat
EndFunc
Re: [R] Récupérer la version d'un fichier sur le net
Posté : ven. 13 févr. 2015 21:48
par Bayo
Merci pour ta solution, je regarderai si je peux l'utiliser

Re: [R] Récupérer la version d'un fichier sur le net
Posté : ven. 13 févr. 2015 23:08
par jguinch
En effet, c'est plus souple avec du XML.
Par contre pourquoi tu n'utilises pas _
VersionCompare (
Misc.au3) ? Quelle a la différence avec ta fonction
compareVersion ?
Re: [R] Récupérer la version d'un fichier sur le net
Posté : dim. 15 févr. 2015 00:52
par ZDS
Je n'utilise pas _VersionCompare, car :
► Afficher le texte_VersionCompare
Code : Tout sélectionner
; #FUNCTION# ====================================================================================================================
; Author ........: Valik
; Modified.......:
; ===============================================================================================================================
Func _VersionCompare($sVersion1, $sVersion2)
If $sVersion1 = $sVersion2 Then Return 0
Local $aVersion1 = StringSplit($sVersion1, ".,"), _
$aVersion2 = StringSplit($sVersion2, ".,")
If UBound($aVersion1) <> UBound($aVersion2) Or UBound($aVersion1) = 0 Then
; Compare as Strings
If $sVersion1 > $sVersion2 Then
Return SetExtended(1, 1) ; @extended set to 1 for string comparison.
ElseIf $sVersion1 < $sVersion2 Then
Return SetExtended(1, -1) ; @extended set to 1 for string comparison.
EndIf
Else
For $i = 1 To UBound($aVersion1) - 1
; Compare this segment as numbers
If StringIsDigit($aVersion1[$i]) And StringIsDigit($aVersion2[$i]) Then
If Number($aVersion1[$i]) > Number($aVersion2[$i]) Then
Return SetExtended(2, 1) ; @extended set to 2 for number comparison.
ElseIf Number($aVersion1[$i]) < Number($aVersion2[$i]) Then
Return SetExtended(2, -1) ; @extended set to 2 for number comparison.
EndIf
Else ; Compare the segment as strings
If $aVersion1[$i] > $aVersion2[$i] Then
Return SetExtended(1, 1) ; @extended set to 1 for string comparison.
ElseIf $aVersion1[$i] < $aVersion2[$i] Then
Return SetExtended(1, -1) ; @extended set to 1 for string comparison.
EndIf
EndIf
Next
EndIf
; This point should never be reached
Return SetError(2, 0, 0)
EndFunc ;==>_VersionCompare
Le code est très (trop) complexe pour aussi peu de flexibilité. Ma fonction est beaucoup plus simple à comprendre et à utiliser, pour peu qu'on comprenne les RegExp. De plus la fonction de Valik ne se base que sur des chaines séparées par le même nombre de points/virgule (comme les valeurs retournées par FileGetVersion de base d'un programme compilé AutoIt). Alors que ma version peut s'adapter à toute autre gestion de version (la mienne étant proche d'un GoRoCo).
Après, il ne s'agit que de mon point de vue (duquel je considère un numéro 2.2b plus parlant qu'un 2.2.1.7).
Re: [R] Récupérer la version d'un fichier sur le net
Posté : sam. 14 mars 2015 12:41
par Bayo
Je reouvre le sujet car j'ai un soucis avec _VersionCompare, car lorsque que je compare une version1 avec une version2 comme ceci
version1=2.1.0.0
version2=2.0.0.0
_VersionCompare(version1,version2) me sort -1 alors qu'il devrait m'afficher 1
et si j'inverse _VersionCompare(version2,version1) il me sort 1 au lieu de -1
et en faisant le test :
version1=2.1.0.0
version2=2.1.0.0
_VersionCompare(version1,version2) il me sort 1 et si j'inverse il me sort -1 alors qu'il devrait m'afficher 0 dans les 2 cas.
je fait des msgbox à chaque fois de mes variables et les versions récupérées sont bien les bonnes.
_VersionCompare Bug.
Sachant qu'une version récupérée se trouve dans un fichier texte sur le net et l'autre est la version d'un exe en local.
Re: [..] Récupérer la version d'un fichier sur le net
Posté : sam. 14 mars 2015 13:18
par ZDS
Hello!
Un code de test serait plus parlant ^^ car si ça se trouve, les valeurs ne sont ce que tu sembles croire.
À bientôt!
Re: [..] Récupérer la version d'un fichier sur le net
Posté : sam. 14 mars 2015 13:55
par Bayo
désolé, c'est en postant le bout de code que j'ai vu le problème. désolé je suis trop id... :p
Merci