Page 1 sur 1

UDF inistring

Posté : dim. 23 déc. 2018 16:07
par Misa10
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")

Re: UDF inistring

Posté : dim. 23 déc. 2018 21:26
par mikell
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

Re: UDF inistring

Posté : mer. 26 déc. 2018 10:49
par DimVar
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.

Re: UDF inistring

Posté : mer. 26 déc. 2018 13:09
par Misa10
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.

Re: UDF inistring

Posté : mer. 26 déc. 2018 14:34
par DimVar
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

Re: UDF inistring

Posté : jeu. 27 déc. 2018 11:55
par Misa10
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.