IO.directory.getFiles() plantage ...

Signaler
Messages postés
551
Date d'inscription
samedi 8 janvier 2005
Statut
Membre
Dernière intervention
12 avril 2008
-
Messages postés
551
Date d'inscription
samedi 8 janvier 2005
Statut
Membre
Dernière intervention
12 avril 2008
-
Bonjour,

Essentiellement sous Vista, IO.Directory.GetFiles plante sur certains dossiers inaccessibles (system volume information, ou autre) .. y'a-t-il un moyen pour avoir tous les fichiers et ignorer les dossiers inaccessibles ? (au lieu de lever une exception qui stoppe tout ...)

merci d'avance à tous

4 réponses

Messages postés
939
Date d'inscription
vendredi 25 octobre 2002
Statut
Membre
Dernière intervention
27 janvier 2009
2
C'est un soucis connu, moi j'ai été obligé de refaire une fonction getfiles à partir de celle integrée au framework, mais sans utiliser l'option "alldirectories".
Je boucle donc sur TOUTS les repertoires, et j'ai pu rajouter un try...catch sur chaque énumération, de manière à ne passer que les dossier posant soucis. (car un try...catch sur un getfiles avec "alldirectories" arrete l'execution de la fonction). C'est pas hyper propre et je pense que ça doit etre plus long que la fonction de base, mais ça a le merite de marcher.

Je n'ai pas le code sous la main, c'etait dans un cadre pro, mais je bon, c'est plus une question d'idée que de code je pense... 

Hvb a.k.a Batto
http://batto.info/ ^^x
bato.ltd .at. gmail.com
Messages postés
551
Date d'inscription
samedi 8 janvier 2005
Statut
Membre
Dernière intervention
12 avril 2008
1
ah bonne idée : mais penses-tu que IO.Directory.GetDirectories plante lui aussi ??

exemple :

For each path as string in io.directory.getdirectories("dossier", "*.*", alldirectories)
  try
     For each file as string in io.directory.getfiles(path, "*.*", toponly)
        ' ...
     next
  catch ex as exception
    exit try
  end try
next

(sinon je devrais faire chaque dossier avec GetDirectories en TopOnly, dans un ArrayList ?)

je test et je poste si 1 code marche, hésite pas à me corriger stp
merci pour l'idée !
Messages postés
551
Date d'inscription
samedi 8 janvier 2005
Statut
Membre
Dernière intervention
12 avril 2008
1
non mon exemple ne marche pas, je continu à chercher ...
Messages postés
551
Date d'inscription
samedi 8 janvier 2005
Statut
Membre
Dernière intervention
12 avril 2008
1
je pense que j'ai trouvé :

Dim folders
As
New ArrayList

Dim folderstoscan
As
New ArrayList

Sub Main()

Dim t
As
New Stopwatcht.Start()

Dim di
As
New IO.DirectoryInfo(
My.Application.Info.DirectoryPath.ToString)

For
Each folder
As
String
In IO.Directory.GetDirectories(di.Root.ToString,
"*.*", IO.SearchOption.TopDirectoryOnly)folders.Add(folder)

folderstoscan.Add(folder)

Next

Do
Until folders.Count = 0

For i
As
Integer = 0
To folders.Count - 1

Try

If i > folders.Count - 1
Then
Exit
For

Try

For
Each folder
As
String
In IO.Directory.GetDirectories(folders.Item(i).ToString,
"*.*", IO.SearchOption.TopDirectoryOnly)folders.Add(folder)

Console.WriteLine(folder)

Next

Catch ex
As Exception

Exit
Try

End
Tryfolderstoscan.Add(folders.Item(i).ToString)

folders.RemoveAt(i)

Catch ex
As Exception

Exit
Try

End
Try

Next

Loopt.Stop()

Console.WriteLine(

"pause " & t.Elapsed.ToString)System.Threading.Thread.Sleep(2000)

t.Start()

For i
As
Integer = 0
To folderstoscan.Count - 1

Try

For
Each file
As
String
In IO.Directory.GetFiles(folderstoscan.Item(i).ToString,
"*.*", IO.SearchOption.TopDirectoryOnly)

' scan fileConsole.Clear()

Next

Catch ex
As Exception

Exit
Try

End
Try

Nextfolderstoscan.Clear()

t.Stop()

Console.WriteLine(

"finish " & t.Elapsed.ToString)Console.Read()

End
Sub