UDF inistring

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Misa10
Niveau 3
Niveau 3
Messages : 38
Enregistré le : sam. 14 avr. 2018 11:50
Status : Hors ligne

UDF inistring

#1

Message par Misa10 » dim. 23 déc. 2018 16:07

Bonjour j'utilise l'UDF inistring qui permet d'utilisé les fonctions d'un .ini mais quand il est hébergé sur le web . Sauf que j'ai un problème .

La fonction read marche parfaitement mais quand je veux écrire dans un fichier ça ne marche pas .

exemple de l'udf :

#include <Inet.au3>
#include <Array.au3>
#include "IniString.au3"

$sSource_Mem_Ini = _InetGetSource("http://www.autoitscript.com/autoit3/files/beta/update.dat")
;or
;$sSource_Mem_Ini = FileRead(@SCRIPTDIR & "\AutoIt.dat") ;read in ini from saved file




;============ _IniString_Write - Example ============
$sByRef_Mem_Ini = $sSource_Mem_Ini
_IniString_Write($sByRef_Mem_Ini, "AutoIt","filetime","Some other time value ! ! ! !") ; rewrite existing key
_IniString_Write($sByRef_Mem_Ini, "AutoIt","downloads","2,145,637 ! ! ! !") ; write new key in existing section
_IniString_Write($sByRef_Mem_Ini, "AutoIt New", "KEY", "Some Value In <AutoIt New> Section ! ! ! !") ; write new key in new section

MsgBox(4096 + 64, "_IniString_Write - Results", _
        StringFormat("Sample of writing to keys/sections.\nThe ''filetime'' key is re-wriiten in the ''[AutoIt]'' section,\n" & _
                "a new ''downloads'' key is written to the ''[AutoIt]'' section,\n" & _
                "and a new key is written to the new ''[AutoIt New]'' section...\n\nBEFORE:\n=======\n%s\n\nAFTER:\n======\n%s", _
                $sSource_Mem_Ini, $sByRef_Mem_Ini))
;============ _IniString_Write - Example ============





ce que j'ai fait pour essayer d'ecrire :

#include <Inet.au3>
#include "IniString.au3"
#include <WinAPIFiles.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Global $Site_key = _InetGetSource("http://mifus.pandiheberge.fr/Key.dat")

_IniString_Write($Site_key, "test","Key","test")

Avatar du membre
mikell
Modérateur
Modérateur
Messages : 5781
Enregistré le : dim. 29 mai 2011 16:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: UDF inistring

#2

Message par mikell » dim. 23 déc. 2018 21:26

Bin oui, c'est normal ^^
Functions for retrieving & modifying data from a string variable containing Ini file data
ça veut dire que IniString sert à travailler les données d'un ini mais sous forme de string, sans le fichier
Pour modifier un fichier sur le net, il faut le lire, modifier le contenu, et réécrire ensuite dans le fichier
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )

Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 744
Enregistré le : ven. 30 mai 2008 14:08
Status : Hors ligne

Re: UDF inistring

#3

Message par DimVar » mer. 26 déc. 2018 10:49

Bonjour,

Pour étoffer les propos de Mikell, tu dois en effet faire ton getsource (cela va rappatrier tonn fichier en local sur ton poste.
Puis le modifier (en memoire) avec l'UDF.
Il te faut ensuite ecrire les données modifiées dans ton fichier local. (filewrite)
Ré-uploader ton fichier sur ton serveur web. (_FTP_Connect)


Cdlt. Dimvar.
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !

Misa10
Niveau 3
Niveau 3
Messages : 38
Enregistré le : sam. 14 avr. 2018 11:50
Status : Hors ligne

Re: UDF inistring

#4

Message par Misa10 » mer. 26 déc. 2018 13:09

Bonjour merci de vos réponses . C'est bien ce que j'essayer de faire en attendant vos réponses modifications de fichier via l'udf FTPex mais j'ai plusieurs problèmes .

Mon code
#include <FTPEx.au3>
#include <MsgBoxConstants.au3>


$Serveur_FTP = "ftp.************.fr"
$Username = "********"
$Mot_De_Passe = "******"
 Local $Err, $sFTP_Message


    Local $hOpen = _FTP_Open('Key_FTP')
    Local $hConn = _FTP_Connect($hOpen, $Serveur_FTP, $Username, $Mot_De_Passe, 1, 21, $INTERNET_SERVICE_FTP)
    If @error Then
        MsgBox($MB_SYSTEMMODAL, '_FTP_Connect', 'ERREUR=' & @error)
                 Else
        _FTP_GetLastResponseInfo($Err, $sFTP_Message)
        ConsoleWrite('$Err=' & $Err & '   $sFTP_Message:' & @CRLF & $sFTP_Message & @CRLF)
        ; Faire quelque chose ...
                 EndIf

                 _FTP_FilePut($hOpen,@ScriptDir & "\Ressources\Config\Key.ini","/")


    Local $iFtpc = _FTP_Close($hConn)
    Local $iFtpo = _FTP_Close($hOpen)
 ;==>_Example


Quand j'utilise mon compte admin la messagebox me retourne erreur : -1 et aucun message d'erreur ou indication dans la console et quand j'utilise un compte secondaire
$Err=0 $sFTP_Message:
220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------
220-You are user number 1 of 50 allowed.
220-Local time is now 13:06. Server port: 21.
220-This is a private system - No anonymous login
220-IPv6 connections are also welcome on this server.
220 You will be disconnected after 15 minutes of inactivity.
331 User test@************.fr OK. Password required
230 OK. Current restricted directory is /
je suis entrain de devenir fou j'arrive pas installer un fichier sur mon ftp qui est sur mon pc . petite précision ( quand j'utilise filezilla la seul façon de connexion c'est avec "connexion FTP simple non sécurisé" sinon la connexion ne marche pas j'ai essayé de trouvé un moyen de reproduire ce paramètres sur autoit mais nada.

Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 744
Enregistré le : ven. 30 mai 2008 14:08
Status : Hors ligne

Re: UDF inistring

#5

Message par DimVar » mer. 26 déc. 2018 14:34

Re,

Il s'agit d'un serveur FTP installé sur ta machine, sur laquelle tu exécutes ton script ?
Quel est la valeur que tu récupères dans $hConn ?
Quand parle d'admin, tu parles d'un compte admin ? Ton user (windows ?) avec lequel tu développes n'est pas membre du groupe Administrators local ?

- Je pense que tu devrais procéder par élimination.
- Prends toi un FTP distant (genre un gratuit chez free.fr.) et teste à distance, ça éliminera tes pb de droits.
- #requireAdmin peut être une piste.
- Es tu sur du mode passif ?

J'ai un script de connexion FTP opérationnel dans un coin, j'essaierai de t'en filer le contenu ce soir si je remets la main dessus.

Cdlt, Dimvar.

[EDIT] Voila ce que j'ai utilisé pour me connecter à mon FTP Chez Free.
 $Open = _FTP_Open('MyFTP Control')

    $Conn = _FTP_Connect($Open, $FTPserver, $username, $pass); se connecte au ftp
    if @error Then
        MsgBox (0,$Titre,"Erreur sur fonction _FTP_Connect")
        Exit
    EndIf

    _FTP_DirSetCurrent ($Conn ,$FTPpath); se positionne dans le chemin du dossier
    If @error Then
        MsgBox (0,$Titre,"Erreur sur fonction _FTP_DirSetCurrent")
        Exit
    EndIf
   _FTP_ProgressUpload1($Conn, $cmdline[1], $TimeStamp&$array[$array[0]]); depose le fichier
     If @error Then
        MsgBox (0,$Titre,"Erreur sur fonction _FTP_ProgressUpload")
        Exit
    EndIf
Func _FTP_ProgressUpload1($l_FTPSession, $s_LocalFile, $s_RemoteFile, $FunctionToCall = "")
        If $__ghWinInet_FTP = -1 Then Return SetError(-2, 0, 0)
        Local $ai_InternetCloseHandle, $glen, $last, $x, $parts, $buffer, $ai_ftpwrite, $result, $out, $i, $ret

        Local $ai_ftpopenfile = DllCall($__ghWinInet_FTP, 'handle', 'FtpOpenFileW', 'handle', $l_FTPSession, 'wstr', $s_RemoteFile, 'dword', $GENERIC_WRITE, 'dword', $FTP_TRANSFER_TYPE_BINARY, 'dword_ptr', 0)
        If @error Or $ai_ftpopenfile[0] = 0 Then Return SetError(-3, _WinAPI_GetLastError(), 0)

        If $FunctionToCall = "" Then ProgressOn($Titre, "Envoi en cours, Veuillez patienter... " ,"","","",18)

        Local $fhandle = FileOpen($s_LocalFile, 16)

        $glen = FileGetSize($s_LocalFile)
        $last = Mod($glen, 100)

        $x = ($glen - $last) / 100
        If $x = 0 Then
                $x = $last
                $parts = 1
        ElseIf $last > 0 Then
                $parts = 101
        Else
                $parts = 100
        EndIf
        If $x < $last Then
                $buffer = DllStructCreate("byte[" & $last & "]")
        Else
                $buffer = DllStructCreate("byte[" & $x & "]")
        EndIf

        For $i = 1 To $parts
                Select
                        Case $i = 101 And $last > 0
                                $x = $last
                EndSelect
                DllStructSetData($buffer, 1, FileRead($fhandle, $x))

                $ai_ftpwrite = DllCall($__ghWinInet_FTP, 'bool', 'InternetWriteFile', 'handle', $ai_ftpopenfile[0], 'ptr', DllStructGetPtr($buffer), 'dword', $x, 'dword*', $out)
                If @error Or $ai_ftpwrite[0] = 0 Then
                        Local $lasterror = _WinAPI_GetLastError()
                        $ai_InternetCloseHandle = DllCall($__ghWinInet_FTP, 'bool', 'InternetCloseHandle', 'handle', $ai_ftpopenfile[0])
                        ; No need to test @error.
                        FileClose($fhandle)

                        Return SetError(-4, $lasterror, 0)
                EndIf

                If $FunctionToCall == "" Then
                                ProgressSet($i)
                Else
                        Select
                                Case $parts = 1
                                        $result = 100
                                Case $i = 101
                                        $result = 100
                                Case Else
                                        $result = $i
                        EndSelect
                        $ret = Call($FunctionToCall, $result)
                        If $ret <= 0 Then
                                $ai_InternetCloseHandle = DllCall($__ghWinInet_FTP, 'bool', 'InternetCloseHandle', 'handle', $ai_ftpopenfile[0])
                                ; No need to test @error.
                                DllCall($__ghWinInet_FTP, 'bool', 'FtpDeleteFileW', 'handle', $l_FTPSession, 'wstr', $s_RemoteFile)
                                ; No need to test @error.
                                FileClose($fhandle)
                                Return SetError(-6, 0, $ret)
                        EndIf
                EndiF
                Sleep(10)

        Next

        FileClose($fhandle)

        If $FunctionToCall = "" Then ProgressOff()

        $ai_InternetCloseHandle = DllCall($__ghWinInet_FTP, 'bool', 'InternetCloseHandle', 'handle', $ai_ftpopenfile[0])
        ; No need to test @error.
        If @error Or $ai_InternetCloseHandle[0] = 0 Then Return SetError(-5, 0, 0)

        Return 1
EndFunc   ;==>_FTP_ProgressUpload
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !

Misa10
Niveau 3
Niveau 3
Messages : 38
Enregistré le : sam. 14 avr. 2018 11:50
Status : Hors ligne

Re: UDF inistring

#6

Message par Misa10 » jeu. 27 déc. 2018 11:55

Merci de ta réponse ( j'essaierai ton script des que je le peux )

- j'utilise bien un FTP distant

- non je parle bien du compte admin de mon FTP . Je peux créé des compte secondaire qui donne accès a une seul racine . Mais j'ai un compte de base qui donne accès a tout le FTP .

- oui oui quand je me connecte filezilla il faut que je choisisse connexion simple non sécurisé donc j'avais essayé de me mettre en mode passif quand j'essaie de me confirmer avec le script et ça n'a rien changé a la situation.

Répondre