µLua DS - Forum officiel | Official forum Index du Forum

µLua DS - Forum officiel | Official forum
Le bon endroit pour en savoir plus sur MicroLua et pour parler de vos projets ! | The right place to learn more about MicroLua and talk about your projects !

 FAQFAQ   RechercherRechercher   MembresMembres   GroupesGroupes   S’enregistrerS’enregistrer   ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 

[µlua]System.listDirectory()

 
Poster un nouveau sujet   Répondre au sujet    µLua DS - Forum officiel | Official forum Index du Forum -> Section française -> Report de bugs
Sujet précédent :: Sujet suivant  
Auteur Message
geeker


Hors ligne

Inscrit le: 23 Déc 2012
Messages: 363

MessagePosté le: Dim 5 Mai 2013 - 16:53    Sujet du message: [µlua]System.listDirectory() Répondre en citant

Bonjour.
J'ai codé un script d'installation universelle d'homebrews (que j'ai appelé µInstall) et qui marche très bien ... A une exception ...
La fonction System.listDirectory(), si le répertoire de travail n'est pas celui entré en paramètre, retourne une liste, avec les bons noms de fichiers ... Mais me dit que tous ces fichiers sont des dossiers !
J'ai testé avec le répertoire d'installation System.currentdirectory() et là ça marche ...
Voici le code complet: (les commentaires en français sont ceux que j'ai rajouté)
Code:


System.changeDirectory(ULUA_SCRIPTS)
ULUA_SCRIPTS = System.currentDirectory() --définition du chemin absolu

--custom install paths
--FILE_PATH = ("fat:/lua/scripts/examples/")
--end

if not _PINFO then
 _PINFO = (ULUA_VERSION) --au cas où ... 
end
INST_PATH = (ULUA_SCRIPTS.._PINFO.."/")
if not FILE_PATH then
 FILE_PATH = System.currentDirectory() --ceci est juste pour tester
end

while Keys.held.A do
 Controls.read()
end

status = ""
require("LW")

NEXT = LWidget.new("TButton", SCREEN_DOWN, 200, 170, 50, 10, "Suivant")
PREV = LWidget.new("TButton", SCREEN_DOWN, 6, 170, 50, 10, "Annuler")

while not NEXT:state() do
 Controls.read()
 screen.drawFillRect(SCREEN_DOWN, 0, 0, 256, 192, Color.new(31,31,31))
 screen.drawTextBox(SCREEN_DOWN, 2, 2, 200, 168, "Bienvenue dans l'installateur de ".._PINFO.."\nCliquez sur Suivant pour continuer.", Color.new(0,0,0))
 
 PREV:draw()
 PREV:held()
 if PREV:state() then
  return
 end
 NEXT:draw()
 NEXT:held()
 render()
end

while Stylus.held do
 Controls.read()
 NEXT:held()
end

if _CONDITION then
 acc = LWidget.new("liste", SCREEN_DOWN, 2, 160, 100, nil, {"J'accepte","Je refuse"},"down",2)
 while not NEXT:state() do
  Controls.read()
  screen.drawFillRect(SCREEN_DOWN, 0, 0, 256, 192, Color.new(31,31,31))
  screen.drawTextBox(SCREEN_DOWN, 2, 2, 254, 158, _CONDITION, Color.new(0,0,0))
  PREV:draw()
  PREV:held()
  if PREV:state() then
   return
  end
  acc:draw()
  acc:held()
  if acc:state() == 1 then
   NEXT:draw()
   NEXT:held()
  end
  render()
 end
 acc:del()
 acc = nil
end

while Stylus.held do
 Controls.read()
 NEXT:held()
end

while not NEXT:state() do
 Controls.read()
 screen.drawFillRect(SCREEN_DOWN, 0, 0, 256, 192, Color.new(31,31,31))
 screen.drawTextBox(SCREEN_DOWN, 2, 2, 254, 168, "Appuyez sur Suivant pour commencer l'installation.", Color.new(0,0,0))
 PREV:draw()
 PREV:held()
 if PREV:state() then
  return
 end
 NEXT:draw()
 NEXT:held()
 render()
end

render()
screen.drawFillRect(SCREEN_DOWN, 0, 0, 256, 192, Color.new(31,31,31))
screen.print(SCREEN_DOWN, 2, 2, "Préparation des fichiers ...",Color.new(0,0,0))
render()
liste = System.listDirectory(FILE_PATH)
System.changeDirectory(ULUA_SCRIPTS)
System.makeDirectory("./".._PINFO)
while System.currentDirectory() ~= INST_PATH do
 System.changeDirectory(INST_PATH)
 screen.drawFillRect(SCREEN_DOWN, 0, 0, 256, 192, Color.new(31,31,31))
 screen.print(SCREEN_DOWN, 2, 2, "Creation du dossier ...", Color.new(0,0,0))
 screen.print(SCREEN_DOWN, 2, 10, "Actuel: "..System.currentDirectory(), Color.new(0,0,0))
 screen.print(SCREEN_DOWN, 2, 18, "Cible: "..INST_PATH, Color.new(0,0,0))
 render()
end

render()
screen.drawFillRect(SCREEN_DOWN, 0, 0, 256, 192, Color.new(31,31,31))
screen.print(SCREEN_DOWN, 2, 2, "Copie des fichiers ...",Color.new(0,0,0))
render()

prog1 = LWidget.new("barreProg", SCREEN_DOWN, 2, 12, 252, 10, Color.new(2,2,31))
prog2 = LWidget.new("barreProg", SCREEN_DOWN, 2, 22, 252, 10, Color.new(2,2,31))
file = 1
line = 1
etat = "open"
content = {}

tim = Timer.new()
tim:start()
while liste[file] do
 Controls.read()
 screen.drawFillRect(SCREEN_DOWN, 0, 0, 256, 192, Color.new(31,31,31))
 
 if etat == "open" then
  if liste[file].isDir then
   file = file + 1
  else
   fc = io.open(FILE_PATH..liste[file].name)
   if fc then
    etat = "read"
   end
  end
 end
 
 if etat == "read" then
  content[line] = fc:read("*l")
  if not content[line] then
   etat = "prewrite"
   line = 0
  end
  line = line + 1
 end
 
 if etat == "prewrite" then
  if fc then
   fc:close()
   fc = nil
  end
  fi = io.open(INST_PATH..liste[file].name, "w")
  prog2.param[5] = 0
  if fi then
   etat = "write"
  end
 end
 
 if etat == "write" then
  if content[line] then
   fi:write("\n"..content[line])
   prog2.param[5] = math.floor((line/#content)*100)
   line = line + 1
  else
   fi:flush()
   fi:close()
   fi = nil
   etat = "postwrite"
  end
 end
 
 if etat == "postwrite" then
  file = file + 1
  line = 1
  prog2.param[5] = 0
  etat = "open"
  content = nil
  collectgarbage()
  content = {}
 end
 
 if etat == "annul" then
  if liste[file] then
   if not liste[file].isDir then
    System.remove(INST_PATH..liste[file].name)
   end
   file = file + 1
  end
 end
 
 PREV:draw()
 PREV:held()
 if PREV:state() then
  etat = "annul"
  if fi then 
   fi:close()
   fi = nil
  elseif fc then
   fc:close()
   fc = nil
  end
  content = nil
  file = 1
  line = 1
  System.changeDirectory(INST_PATH)
  liste = System.listDirectory(INST_PATH)
  prog1.param[1] = Color.new(31,2,2)
  prog2.param[5] = 0
  prog2:alpha(20)
 end
 
 prog1.param[5] = math.floor((file/#liste)*100)
 if prog1.param[5] > 100 then prog1.param[5] = 100 end
 if liste[file] then
  if liste[file].isDir then
   screen.print(SCREEN_DOWN, 2, 2, "Fichier: "..liste[file].name, Color.new(0,0,31))
  else
   screen.print(SCREEN_DOWN, 2, 2, "Fichier: "..liste[file].name, Color.new(0,0,0))
  end
 end
 screen.drawFillRect(SCREEN_DOWN, 2, 12, 254, 32, Color.new(10,10,10))
 prog1:draw()
 prog2:draw()
 if etat == "read" then
  screen.print(SCREEN_DOWN, 2, 34, "Reading ... ("..line..")", Color.new(0,0,0))
 elseif etat == "prewrite" then
  screen.print(SCREEN_DOWN, 2, 34, "Opening ...", Color.new(0,0,0))
 elseif etat == "write" then
  screen.print(SCREEN_DOWN, 2, 34, "Writing ... ("..line..")", Color.new(0,0,0))
 elseif etat == "annul" then
  screen.print(SCREEN_DOWN, 2, 34, "Annulation ...", Color.new(0,0,0))
 end
 render()
end
if etat == "annul" then
 System.remove(ULUA_SCRIPTS..INST_PATH)
end
tim:stop()

content = nil
line = nil
file = nil
liste = nil
collectgarbage()

while NEXT:state() do
 Controls.read()
 NEXT:held()
end

while not NEXT:state() and etat ~= "annul" do
 if #System.listDirectory(INST_PATH) > 2 then
  Controls.read()
  screen.drawFillRect(SCREEN_DOWN, 0, 0, 256, 192, Color.new(31,31,31))
  screen.drawTextBox(SCREEN_DOWN, 2, 2, 254, 168, "Vous avez installé ".._PINFO.." avec succés ! ("..(tim:time()/1000).."s.)", Color.new(0,0,0))
  
  NEXT:draw()
  NEXT:held()
  render()
 else
  Controls.read()
  screen.drawFillRect(SCREEN_DOWN, 0, 0, 256, 192, Color.new(31,31,31))
  screen.drawTextBox(SCREEN_DOWN, 2, 2, 254, 168, "Erreur: les fichiers n'ont pas étés copiés . Veuillez réessayer .", Color.new(0,0,0))
  NEXT:draw()
  NEXT:held()
  render()
 end
end

etat = nil
tim = nil
NEXT:del()
PREV:del()
--LWidget.unload()
[/hide]


Je suis quasiment sur que c'est un bug de µLua, c'est pour ça que je poste ici Smile
Mon shell me retourne pourtant les bons "isDir" quand je vais dans un dossier ...

(merci de déplacer ce post si c'est un bug de mon code ...)

Merci d'avoir lu !
_________________
Beta-testeur de l'extrème
Tox: FFBDC8B34DC3CDE51F8F1CB0A628147DE740ACD1D44682EB5492A681F6541E32E8D8BB6052B3
CtrµLua: ctrulua.github.io
Des p'tits true, des p'tits true, toujours des p'tits true ...


Revenir en haut
Visiter le site web du posteur
Publicité






MessagePosté le: Dim 5 Mai 2013 - 16:53    Sujet du message: Publicité

PublicitéSupprimer les publicités ?
Revenir en haut
megagugus14


Hors ligne

Inscrit le: 03 Aoû 2012
Messages: 168

MessagePosté le: Dim 5 Mai 2013 - 19:36    Sujet du message: [µlua]System.listDirectory() Répondre en citant

Je pense que c'est un bug de uLua qui dure depuis bien longtemps... Ou alors c'est un autre bug sur cette fonction, je sais plus.
_________________
Programmeur à 11 ans... Quoi, t'as un problème ?


Revenir en haut
MSN
Reylak
Administrateur

Hors ligne

Inscrit le: 24 Nov 2008
Messages: 2 838
Localisation: Toulouse

MessagePosté le: Dim 5 Mai 2013 - 22:48    Sujet du message: [µlua]System.listDirectory() Répondre en citant

Je regarderai.
_________________


Plein d'infos sur le SourceForge !


Revenir en haut
Visiter le site web du posteur MSN Skype
geeker


Hors ligne

Inscrit le: 23 Déc 2012
Messages: 363

MessagePosté le: Lun 6 Mai 2013 - 10:42    Sujet du message: [µlua]System.listDirectory() Répondre en citant

J'ai réussi à contourner le problème sur mon code en me déplaçant dans les dossiers avant de faire System.listDirectory() . Je pense que je vais faire une fonction (dans un myboot) pour passer outre ce problème ... Mais elle sera plus lente !
J'ai aussi regardé les sources de µLua mais, étant débutant en C, je n'ai rien trouvé ...
Plus qu'a chercher dans les autres code !

(Je poste le code complet de µInstall sous peu)
_________________
Beta-testeur de l'extrème
Tox: FFBDC8B34DC3CDE51F8F1CB0A628147DE740ACD1D44682EB5492A681F6541E32E8D8BB6052B3
CtrµLua: ctrulua.github.io
Des p'tits true, des p'tits true, toujours des p'tits true ...


Revenir en haut
Visiter le site web du posteur
megagugus14


Hors ligne

Inscrit le: 03 Aoû 2012
Messages: 168

MessagePosté le: Lun 6 Mai 2013 - 16:40    Sujet du message: [µlua]System.listDirectory() Répondre en citant

Il n'y avait pas de fonction pour vérifier si un chemin était un dossier ou un fichier ?
_________________
Programmeur à 11 ans... Quoi, t'as un problème ?


Revenir en haut
MSN
Reylak
Administrateur

Hors ligne

Inscrit le: 24 Nov 2008
Messages: 2 838
Localisation: Toulouse

MessagePosté le: Lun 6 Mai 2013 - 20:09    Sujet du message: [µlua]System.listDirectory() Répondre en citant

Pour la petite histoire, cette fonction m'a pris la tête quand j'ai rajouté l'EFS parce qu'elle déconnait dans le contenu du système de fichiers virtuel. Auparavant, elle avait pris la tête de Papymouge (c'était un peu ma faute aussi si l'on peut dire), alors je t'avoue que ça me soule qu'elle ne fonctionne pas x)

@megagugus14 : ce n'est pas une fonction, c'est un attribut des éléments retournés par listDirectory(). Chaque élément de la table que la fonction retourne contient "name" pour le nom, et "isDir" qui indique par un booléen si c'est un dossier ou non.

D'ailleurs c'est marrant que ça mette tous ces attributs à true, je les aurais plutôt vus à false ou alors à nil (ce qui fait la même chose dans un test).
_________________


Plein d'infos sur le SourceForge !


Revenir en haut
Visiter le site web du posteur MSN Skype
Papymouge
Modérateur

Hors ligne

Inscrit le: 10 Mai 2009
Messages: 693
Localisation: Vittel (88)

MessagePosté le: Lun 6 Mai 2013 - 21:05    Sujet du message: [µlua]System.listDirectory() Répondre en citant

Il faut savoir aussi que listDirectory retourne la taille en octets (size) des fichiers.

Sinon Geeker, as tu essayé de mettre le chemin complet du dossier que tu veut lister? du style : (fat:/chemin/du/dossier)

C'est juste une idée, tient nous au courant du résultat.
_________________
La page de mes projets
L'ancienne page de mes projets


Revenir en haut
geeker


Hors ligne

Inscrit le: 23 Déc 2012
Messages: 363

MessagePosté le: Mar 7 Mai 2013 - 10:37    Sujet du message: [µlua]System.listDirectory() Répondre en citant

Tous les chemins sont absolus dans mon code ... Mais depuis j'ai corrigé ce problème ! Il suffit de se déplacer dans le dossier à lister avant de le lister .
Je sort une nouvelle fonction dès que j'ai fini µInstall !
@Papymouge: regarde mon shell, j'ai déjà remarqué qu'il y avait size, mais j'ai aussi remarqué que avez un dossier, size vaut toujours 0 ... Sauf avec la version EFS ! Cette fonction est vraiment buguée ...
_________________
Beta-testeur de l'extrème
Tox: FFBDC8B34DC3CDE51F8F1CB0A628147DE740ACD1D44682EB5492A681F6541E32E8D8BB6052B3
CtrµLua: ctrulua.github.io
Des p'tits true, des p'tits true, toujours des p'tits true ...


Revenir en haut
Visiter le site web du posteur
habababa


Hors ligne

Inscrit le: 07 Mar 2013
Messages: 21
Localisation: Philippines

MessagePosté le: Jeu 9 Mai 2013 - 14:36    Sujet du message: [µlua]System.listDirectory() Répondre en citant

System.listDirectory indeed has numerous bugs in 4.6.1_a.DIR entry #0 is not listed(does not list __aio folder my sd), returns a corrupt directory if arg!=CWD(calling System.listDirectory(dir) after System.changeDirectory(dir) addresses the issue in the post above), potential memory leaks(MAX_PATHLEN provided by libfat must be the buffer size used).
These bugs are fixed in implementation in the sources I uploaded at the English section.


Revenir en haut
Reylak
Administrateur

Hors ligne

Inscrit le: 24 Nov 2008
Messages: 2 838
Localisation: Toulouse

MessagePosté le: Jeu 9 Mai 2013 - 16:35    Sujet du message: [µlua]System.listDirectory() Répondre en citant

Okay okay donc cette fonction est ultra-buggée o/
Issue #67: http://code.google.com/p/microlua/issues/detail?id=67
_________________


Plein d'infos sur le SourceForge !


Revenir en haut
Visiter le site web du posteur MSN Skype
geeker


Hors ligne

Inscrit le: 23 Déc 2012
Messages: 363

MessagePosté le: Jeu 9 Mai 2013 - 17:18    Sujet du message: [µlua]System.listDirectory() Répondre en citant

Et aussi (je sais pas si c'est du à µLua, mais ça me le fait qu'avec µLua) System.listDirectory("fat:/") ne retourne pas le bon dossier "fat:/", des fichiers manquent ou ont un nom différent . Evil or Very Mad
_________________
Beta-testeur de l'extrème
Tox: FFBDC8B34DC3CDE51F8F1CB0A628147DE740ACD1D44682EB5492A681F6541E32E8D8BB6052B3
CtrµLua: ctrulua.github.io
Des p'tits true, des p'tits true, toujours des p'tits true ...


Revenir en haut
Visiter le site web du posteur
Reylak
Administrateur

Hors ligne

Inscrit le: 24 Nov 2008
Messages: 2 838
Localisation: Toulouse

MessagePosté le: Jeu 9 Mai 2013 - 22:15    Sujet du message: [µlua]System.listDirectory() Répondre en citant

Citation:
des fichiers manquent ou ont un nom différent

Comment les fichiers peuvent avoir un nom différent ? O_o
_________________


Plein d'infos sur le SourceForge !


Revenir en haut
Visiter le site web du posteur MSN Skype
geeker


Hors ligne

Inscrit le: 23 Déc 2012
Messages: 363

MessagePosté le: Ven 10 Mai 2013 - 10:22    Sujet du message: [µlua]System.listDirectory() Répondre en citant

Ben, j'ai un dossier qui s'appelle ulua (où je met toutes mes versions de µLua/nanoLua etc.) et avec System.listDirectory() le nom du dossier devient "?$£µ" ... Mais le contenu est le même ! Donc c'est un bug ...
_________________
Beta-testeur de l'extrème
Tox: FFBDC8B34DC3CDE51F8F1CB0A628147DE740ACD1D44682EB5492A681F6541E32E8D8BB6052B3
CtrµLua: ctrulua.github.io
Des p'tits true, des p'tits true, toujours des p'tits true ...


Revenir en haut
Visiter le site web du posteur
Reylak
Administrateur

Hors ligne

Inscrit le: 24 Nov 2008
Messages: 2 838
Localisation: Toulouse

MessagePosté le: Ven 10 Mai 2013 - 19:09    Sujet du message: [µlua]System.listDirectory() Répondre en citant

Ah oui... Problème de gestion du string en C je dirais. Ou encodage d'une façon ou d'une autre.
_________________


Plein d'infos sur le SourceForge !


Revenir en haut
Visiter le site web du posteur MSN Skype
Contenu Sponsorisé






MessagePosté le: Aujourd’hui à 03:48    Sujet du message: [µlua]System.listDirectory()

Revenir en haut
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    µLua DS - Forum officiel | Official forum Index du Forum -> Section française -> Report de bugs Toutes les heures sont au format GMT + 1 Heure
Page 1 sur 1

 
Sauter vers:  

Index | Creer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Powered by phpBB © 2001, 2005 phpBB Group
Traduction par : phpBB-fr.com