Page 1 sur 1

Erreur dans FileFindFirstFile()

Posté : mer. 27 nov. 2019 15:24
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.

Re: Variable inaccessible

Posté : jeu. 28 nov. 2019 10:59
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

Re: Variable inaccessible

Posté : mar. 03 déc. 2019 11:17
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.



++

Re: Variable inaccessible

Posté : ven. 06 déc. 2019 23:50
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....