[R] Où placer mon code de ProgressBar ?

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
arrkhan
Niveau 8
Niveau 8
Messages : 528
Enregistré le : sam. 17 nov. 2007 03:30
Status : Hors ligne

[R] Où placer mon code de ProgressBar ?

#1

Message par arrkhan »

Bonjour à tous,

Comme vous le savez peut etre, je reviens d'un raid de trois semaines au Maroc, ou j'ai pris beaucoup de photos, et où les 13 autres equipages en ont pris egalement, nous avons donc decide de mettre toute nos photos sur un serveur dedié, et j'ai pris l'initiative de faire une tite application pour ne pas filer les identifiants a tous le monde.

Aprés vous avoir raconté ma vie, je vous expose mon probleme.

Le .zip ci dessous contient le AU3, l'exe et ftpdmin(pour creer un serveur en 2 clic)

a propos du AU3:

ligne 81 :
$Speed = "768" pour accelerer le demarrage de l'application sans faire de test d'upload reel.
pour faire le test
remplacer ligne 81 $Speed = "768" par $Speed = _GetSpeed(1)
remplacer ligne 84 $SpeedKo = Round($Speed / 8, 0) par $SpeedKo = Round($Speed[1] / 8, 0)

lignes 118 à 120 :
$server = '*******.*****.***' pour utiliser avec ftpdmin 127.0.0.1
$username = '*******' non requis ftpdmin
$pass = '*********' non requis ftpdmin

voici ce que j'aimerai inclure sans y parvenir :

la progressbar de l'upload de fichier :

Code : Tout sélectionner

For $i = 0 To FileGetSize(Chemin/du/fichier) Step ($SpeedKo * 1024)
    ;MsgBox(0, '', 'Chemin/du/fichier' & " = " & FileGetSize($s_LocalFolder & "\" & $file) & @CRLF & _
    ;       "vitesse = " & ($SpeedKo * 1024) & @CRLF & _
    ;       "sleep = " & round(_TimeFormat(FileGetSize($s_LocalFolder & "\" & $file) / ($SpeedKo * 1024), 1), 0))
    GUICtrlSetData($ProgressFile, $i)
    
    $wait = _TimeFormat(FileGetSize(Chemin/du/fichier) / ($SpeedKo * 1024), 1)
    Sleep($wait)
    Next

traduction rapide :

pour $i = 0 to "taille du fichieren octets" step "la vitesse d'upload en octets"
$wait = temps en millisecondes("taille du fichier" / "la vitesse d'upload en octets")

et la progress bar de la progression totale :

Code : Tout sélectionner

For $j = 0 To ($DirSize[1]+$DirSize[2]) Step 1
    GUICtrlSetData($ProgressDir, $j)
    Next
($DirSize[1]+$DirSize[2]) = nombre de fichier + nombre de dossier

20 heures que je passe a faire des centaines de tests sans parvenir a quelques chose, je dois etre mauvais ou alors j'ai pas compris le fonctionnement de la progressbar (1ere utilisation )

si une bonne ame pouvais me les placer correctement... je pense qu'elle vont dans les fonctions _FTPPutFile ou _FTPPutFolderContents au meme titre que la ligne 373

Code : Tout sélectionner

GUICtrlSetData($PFText, StringLeft($s_LocalFolder, 3) & "....." & StringRight($s_LocalFolder, 15) & "\" & $file & " (" & Round(FileGetSize($s_LocalFolder & "\" & $file) / 1024, 2) & " Ko.)")
FTPRO2008.zip
petit oubli, pensez a creer des dossiers sur votre serveur pour que le script fonctionne ou modifiez le :
testRO2008/Babas
testRO2008/Alain
Modifié en dernier par Tlem le ven. 06 juin 2008 07:40, modifié 6 fois.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11793
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Où placer mon code de ProgressBar ?

#2

Message par Tlem »

Salut arrkhan, j'espère que ton petit séjour c'est déroulé pour le mieux et que tu t'est bien amusé.

En ce qui concerne ton problème, voici un code qui permet d'afficher une progressBar au téléchargement d'un fichier :

Code : Tout sélectionner

HotKeySet("{ESC}", "_InetGetAbort")

$FileUrl = "http://www.autoitscript.com/autoit3/files/beta/autoit/archive/autoit-v3.2.12.0-rc4-setup.exe"
$FileSize = InetGetSize($FileUrl)

$FileName = StringRegExpReplace($FileUrl, "^.*/", "")

InetGet($FileUrl,@scriptdir & "\" & $FileName, 1, 1)

ProgressOn("Download progress for "&$FileName, "", "0%")
While @InetGetActive
    $Prog = Int((100 * @InetGetBytesRead) / $FileSize)
    ProgressSet($prog, @InetGetBytesRead & "/" & $FileSize & " bytes", "Downloading "&$FileName)
    Sleep(250)
WEnd

Func _InetGetAbort()
    InetGet("abort")
EndFunc ;==> _InetGetAbort()
Pour l'utilisation de InetGetSize avec une adresse FTP et Login/passwd voir l'aide de la commande.
Voilà j'espère que cela peut aider.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
arrkhan
Niveau 8
Niveau 8
Messages : 528
Enregistré le : sam. 17 nov. 2007 03:30
Status : Hors ligne

Re: [..] Où placer mon code de ProgressBar ?

#3

Message par arrkhan »

beh en fait non, t'as pas du jeter un oeil a mon script :wink:

je cherche pas a faire une progressbar de telechargement, mais d'upload, et hormis ses 2 commandes mon script et terminé, gestion des erreur faite...
le probleme est que je ne sais foutrement pas ou les placer dans le corps du code :?

merci d avance
Avatar du membre
jbnh
Niveau 11
Niveau 11
Messages : 1932
Enregistré le : ven. 02 mai 2008 14:54
Localisation : Bruxelles
Status : Hors ligne

Re: [..] Où placer mon code de ProgressBar ?

#4

Message par jbnh »

Coucou

Bon avant de regarder ton code j'avais déjà essayé de faire une progress bar pour upload mais sans grands résultats

Voila un peu de quoi ça à l'air:

Code : Tout sélectionner

#include <FTP.au3>

$server = 'server'
$username = 'login'
$pass = 'password'
$SourceFile ='test.txt'
$SourceSize = FileGetSize($SourceFile)
$DestFileSize = 1

$Open = _FTPOpen('MyFTP Control')
$Conn = _FTPConnect($Open, $server, $username, $pass)
$Ftpd = _FTPDelFile($Conn, 'test.txt')
$Ftpp = _FtpPutFile($Conn, $SourceFile, 'test.txt')

ProgressOn("Uploading", "")
    While $DestFileSize < $SourceSize
        Sleep(100)
        $DestFileSize = InetGetSize("file2")
        $Percent = round(($DestFileSize/$SourceSize)*100,0)
        ProgressSet($Percent, $Percent & "% done")
    WEnd
ProgressOff()
msgbox (0, "Error", 'Uploaded')
Si vous trouvez pourquoi , dites le, on pourra peut être adapter pour arrkhan par la suite !
Balise [..] devant votre requête en cours, [R] quand résolu | Pas de message concernant les bots !

Merci
Avatar du membre
arrkhan
Niveau 8
Niveau 8
Messages : 528
Enregistré le : sam. 17 nov. 2007 03:30
Status : Hors ligne

Re: [..] Où placer mon code de ProgressBar ?

#5

Message par arrkhan »

ben le probleme, c'est que je voudrais que ma progressbar soit dependante de ma gui, apparement ProgressOn cree une gui specifique.
Avatar du membre
arrkhan
Niveau 8
Niveau 8
Messages : 528
Enregistré le : sam. 17 nov. 2007 03:30
Status : Hors ligne

Re: [..] Où placer mon code de ProgressBar ?

#6

Message par arrkhan »

bon, ca progresse enfin depuis 3 jours que je suis dessus, pour une progressbar de progression de fichier il faut quelques peu modifier la fonction _FTPPutFolderContents en entourant la fonction _FTPPutFile qu'il contient de :

Code : Tout sélectionner

Dim $i
                
                $Step = 100 * ($SpeedKo * 1024) / FileGetSize($s_LocalFolder & "\" & $file)
                
                If FileGetSize($s_LocalFolder & "\" & $file) < ($SpeedKo * 1024) Then
                    $Step = 100
                EndIf
                
                For $i = 0 To 100 Step $Step
                    GUICtrlSetData($ProgressFile, $i)
             
                    _FTPPutFile($l_InternetSession, $s_LocalFolder & "\" & $file, $s_RemoteFolder & "/" & $file, 0, 0)

                Next
meme si ce n'est pas parfait, ca donne une idee...

je tente de faire la meme chose avec la progression totale
Avatar du membre
arrkhan
Niveau 8
Niveau 8
Messages : 528
Enregistré le : sam. 17 nov. 2007 03:30
Status : Hors ligne

Re: [..] Où placer mon code de ProgressBar ?

#7

Message par arrkhan »

bon ben c'est bon, tout marche enfin comme je veux, je vous met la fonction modifié, ca peut servir a d'autres

Code : Tout sélectionner

Func _FTPPutFolderContents($l_InternetSession, $s_LocalFolder, $s_RemoteFolder, $b_RecursivePut)

    ; Shows the filenames of all files in the current directory.
    $search = FileFindFirstFile($s_LocalFolder & "\*?.?*") ; petite modif pour que ca fonctionne correctement

    ; Check if the search was successful
    If $search = -1 Then
        MsgBox(0, $APPTitle & " - Erreur", "Dossier invalide.") ; $AppTitle = "nom de l exe"
    EndIf
    
    While 1
        
        $file = FileFindNextFile($search)
        
        If @error Then ExitLoop
        
        $PathCourt = StringLeft($s_LocalFolder, 3) & "....." & StringRight($s_LocalFolder, 15) & "\" & $file
        GUICtrlSetData($PFText, $PathCourt & " (" & Round(FileGetSize($s_LocalFolder & "\" & $file) / 1024, 2) & " Ko.)")

        If StringInStr(FileGetAttrib($s_LocalFolder & "\" & $file), "D") Then
            _FTPMakeDir($l_InternetSession, $s_RemoteFolder & "/" & $file)
            
            If $b_RecursivePut Then
                
                _FTPPutFolderContents($l_InternetSession, $s_LocalFolder & "\" & $file, $s_RemoteFolder & "/" & $file, $b_RecursivePut)
                
            EndIf
            
        Else
            Dim $i
            
            $Step = Round(100 * (vitesse d'upload en octet) / FileGetSize($s_LocalFolder & "\" & $file), 0)
    
            If FileGetSize($s_LocalFolder & "\" & $file) < ($SpeedKo * 1024) Then
                $Step = 100
            EndIf
            
            For $i = 0 To 100 Step $Step
                $progdir = 100 / (($DirSize[1] + $DirSize[2]) * 2) ; $DirSize = Dirgetsize("folder en question")
                GUICtrlSetData($ProgressDir, GUICtrlRead($ProgressDir) + $progdir)
                
                GUICtrlSetData($ProgressFile, $i)
                
                _FTPPutFile($l_InternetSession, $s_LocalFolder & "\" & $file, $s_RemoteFolder & "/" & $file, 0, 0)
            Next
            
            $progdir = 100 / (($DirSize[1] + $DirSize[2]) * 2)
            GUICtrlSetData($ProgressDir, GUICtrlRead($ProgressDir) + $progdir)

        EndIf
        
    WEnd
    
    ; Close the search handle
    FileClose($search)

EndFunc   ;==>_FTPPutFolderContents
ca fait plaiz', en fait 1 semaine que j'etais la dessus ^^'
Avatar du membre
jbnh
Niveau 11
Niveau 11
Messages : 1932
Enregistré le : ven. 02 mai 2008 14:54
Localisation : Bruxelles
Status : Hors ligne

Re: [..] Où placer mon code de ProgressBar ?

#8

Message par jbnh »

niquel, bien joué :)
Balise [..] devant votre requête en cours, [R] quand résolu | Pas de message concernant les bots !

Merci
Avatar du membre
arrkhan
Niveau 8
Niveau 8
Messages : 528
Enregistré le : sam. 17 nov. 2007 03:30
Status : Hors ligne

Re: [R] Où placer mon code de ProgressBar ?

#9

Message par arrkhan »

en fait non, ce n'est toujours pas bon, ca le fait avec les fichiers moins gros que le step car auquel cas step = 100 et on passe au fichier suivant, pour les fichier plus gros que le step, il increment d'un step le progressbar, "ul" le fichier entiers next reincrement d'un step, re "ul" le fichier entier, etc, etc, etc j'usqu'a 100, du coup ca sert pas a grand chose...
Flop
Niveau 3
Niveau 3
Messages : 48
Enregistré le : lun. 20 oct. 2008 16:48
Status : Hors ligne

Re: [R] Où placer mon code de ProgressBar ?

#10

Message par Flop »

quelqu'un a reussi a faire une progress bar ? je cherche a faire une progressbar d'upload et le dessiner dans ma gui si possible, j'ai réussi pour un download mais pas dans l'autre sens
Répondre