IO.directory.getFiles() plantage ...

allthew3 Messages postés 551 Date d'inscription samedi 8 janvier 2005 Statut Membre Dernière intervention 12 avril 2008 - 5 mai 2007 à 12:09
allthew3 Messages postés 551 Date d'inscription samedi 8 janvier 2005 Statut Membre Dernière intervention 12 avril 2008 - 5 mai 2007 à 19:56
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
A voir également:

4 réponses

hvb Messages postés 939 Date d'inscription vendredi 25 octobre 2002 Statut Membre Dernière intervention 27 janvier 2009 3
5 mai 2007 à 17:35
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
0
allthew3 Messages postés 551 Date d'inscription samedi 8 janvier 2005 Statut Membre Dernière intervention 12 avril 2008 2
5 mai 2007 à 18:15
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 !
0
allthew3 Messages postés 551 Date d'inscription samedi 8 janvier 2005 Statut Membre Dernière intervention 12 avril 2008 2
5 mai 2007 à 18:19
non mon exemple ne marche pas, je continu à chercher ...
0
allthew3 Messages postés 551 Date d'inscription samedi 8 janvier 2005 Statut Membre Dernière intervention 12 avril 2008 2
5 mai 2007 à 19:56
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
0
Rejoignez-nous