Erreur dans FileFindFirstFile()

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Dayoune
Niveau 1
Niveau 1
Messages : 1
Enregistré le : ven. 22 nov. 2019 16:12
Status : Hors ligne

Erreur dans FileFindFirstFile()

#1

Message par Dayoune »

Bonjour tout le monde,

Mon but est de lister tous les fichiers et sous dossiers d'un dossier principal qui s'appelle dans mon exemple "directory" et les mettre sur un fichier txt.
Ensuite récupérer les valeurs du fichier txt et créér des sous dossiers dans un autre dossier qu'on appellera directory2 mais ces sous dossiers doivent porter les noms des valeurs récupérées dans le fichier txt.
Donc ca donnerait C:\directory\sousdossierA => C:\directory2\sousdossierA.

Le souci c'est qu'à un moment dans mon code le message d'erreur suivant apparait : "variable cannot be accessed in this manner"
au niveau de $txt2($i).
$user="C:\directory\"
$prefix2 = $user & "*.*"

$search2 = FileFindFirstFile($prefix2)
$txt2 = ""


While 1
    $file2 = FileFindNextFile($search2)
    If @error Then ExitLoop
    $txt2 &= $file2 & @CRLF
WEnd
FileClose($search2)
FileWrite("liste.txt", $txt2)
Sleep(2000)

Example4()

Func Example4()
Local $txt2 = FileReadToArray("liste.txt")
For $i = 0 To UBound($txt2) - 1
$txt = $txt2($i)
DirCreate("C:\Users\rbouzidi\directory2\" & $txt2[$i] & "\")
Sleep(700)
   Next
   EndFunc


Vous pouvez m'aider svp?

Merci.
Modifié en dernier par walkson le ven. 06 déc. 2019 23:57, modifié 1 fois.
Raison : Changer pour un titre explicite utile à tous !
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: Variable inaccessible

#2

Message par walkson »

Bonjour,
Décidément, les titres sont tristes et peu explicites !!! :roll:
Pour résoudre votre problème mettre $prefix2 = $user & "\*.*"
Supprimer $txt = $txt2($i) qui devrait être $text2[$i] mais je n'en vois pas l’intérêt...
éviter d'utiliser une variable qui devient un array $txt2 = ""
et enfin testez votre code ShellExecuteWait("liste.txt") _ArrayDisplay($txt2) pour vérifier que tout est en ordre, même si vous pouvez supprimer ces vérifications dans le code final
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
franco
Niveau 7
Niveau 7
Messages : 342
Enregistré le : lun. 03 oct. 2011 22:37
Localisation : Liévin
Status : Hors ligne

Re: Variable inaccessible

#3

Message par franco »

Salut.

Bien que l'intéresse ne répond pas, quelque chose me chiffonne.... voire plusieurs choses.
Mon but est de lister tous les fichiers et sous dossiers d'un dossier principal qui s'appelle dans mon exemple "directory" et les mettre sur un fichier txt.
Pourquoi ne pas partir avec un _FileListToArrayRec ?

Ensuite, une boucle for permettrait de lister tous les répertoires, et ainsi créer les sous dossiers directement, sans avoir besoin de passer par la création de fichier txt...


Car, si c'est créer un fichier pour récupérer ligne par ligne, ça n'a pas d'intérêt, on peut s'en passer.



++
L'entraide, c'est mon dada ;)
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: Variable inaccessible

#4

Message par walkson »

Bonjour Franco
Notre ami n'est pas très bavard au niveau de la récursivité dont votre proposition peut résoudre. Mais sous la forme de la demande, la question n'est pas posée (je suppose).
J'utilise très peu FileFindFirstFile() et je me suis amusé à "triturer la fonction". Ce qui me donne:
DirRemove(@DesktopDir & "\directory2\" ,1); pour le test
$user= FileSelectFolder("", @DesktopDir,0,@DesktopDir)
$prefix2 = $user & "\*"

$search2 = FileFindFirstFile($prefix2)

While 1
    $file2 = FileFindNextFile($search2)
   Local $ext = @extended
    If @error Then ExitLoop
   ;If $ext = 0 Then DirCreate(@DesktopDir & "\directory2\" & $file2 & "\");fichier
   If $ext = 1 Then DirCreate(@DesktopDir & "\directory2\" & $file2 & "\");dossier
   ;DirCreate(@DesktopDir & "\directory2\" & $file2 & "\");les 2
WEnd
FileClose($search2)
Ce qui donne trois solutions, que les fichiers ou les dossiers ou les deux. Dans cette recherche (simple) pas de array, cela peut être utile....
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Répondre