Getfiles() UnauthorizedAccesException

Fermé
apprenti - 29 mars 2018 à 13:06
 apprenti - 30 mars 2018 à 12:15
Bonjour,

J'ai beau chercher sur internet et je ne trouve pas la solution que je souhaite mis à part de recréer la fonction Getfiles()
Mon problème :
Getfiles() ballait des répertoires ou l'accès n'est pas autorisé. Lorsque c'est le cas je souhaite passer au répertoire d'après via un Try.. Catch.. mais vu qu'on ne contrôle pas les répertoires je ne vois pas comment réaliser cette action et je ne trouve pas une option dans la fonction, s'il y en a.

Merci d'avance pour votre aide.

1 réponse

yg_be Messages postés 23531 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 22 avril 2025 Ambassadeur 1 579
30 mars 2018 à 10:06
bonjour, en quel langage programmes-tu? peux-tu partager ton code?
qu'est-ce qui t’empêche de controller les répertoires?
moi j'essaierais avec un for each.
0
Bonjour, je code en VB sur VisualBasic express 2010.
j'utilise déjà un catch pour sauter l'erreur au premier lancement de l'app. Ca marche très bien donc ne soyez pas perturbé si le code dans le catch est très fortement identique à celui qui est dans le try.

je suis dispo pour vos questions.
Merci pour votre réponse.

voici mon code :

Sub NewFiles(ByRef tab_new() As String)

Dim tab_search(1000) As String
CreationFichierTXT(path_txt, user)
ReadIniFile(Mypath, CopyIn, Extension, StartDate)
nombreLignes_txt(NombreLignestxt)
' CreationFichierTXT(path_txt, user)

Dim fi As New System.IO.FileInfo(path_txt)
Dim i As Integer = 0
Dim a As Integer = 1
Dim z As Integer = 0
Dim f As Integer = 0
Dim i_rec As Integer = 0
Dim cheminautorise(1000) As String
Dim IncludeSubFolders As Boolean = True

' LoadFileList(Mypath(a), list1)
' recherhce()
' test()

Try
Dim lines() As String = File.ReadAllLines(path_txt)
Dim touttext As String = File.ReadAllText(path_txt)
Dim Fichier As String


For Each Fichier1 As String In My.Computer.FileSystem.GetFiles(Mypath(a), FileIO.SearchOption.SearchAllSubDirectories, "*" + Extension)

If Path.GetFileName(Fichier1).ToLower.Contains(Extension) Then

Fichier = CreateObject("Scripting.FileSystemObject").GetFileName(Fichier1)

Dim verif_MDF() As String = File.ReadAllLines(Fichier1)
If verif_MDF(0).Contains("MDF") Then

If Fichier1 <> "" Then

tab_search(z) = Fichier1

End If

If Not lines.Contains(Fichier1 + ";C;") And Not lines.Contains(Fichier1 + ";A;") And Not lines.Contains(Fichier1 + ";B;") Then

Dim dt As Date
Dim DateModifFichier As Date
Dim tailleFichiers As String
dt = FileDateTime(Fichier1)
DateModifFichier = FileDateTime(Fichier1)
' DateModifFichier = Format(Fichier1)
tailleFichiers = FileLen(Fichier1)

If Not touttext.Contains(Fichier1 + ";A;" + DateModifFichier + ";" + tailleFichiers) Then


MonFichier = My.Computer.FileSystem.OpenTextFileWriter(path_txt, True)
MonFichier.WriteLine(Fichier1 + ";A;" + DateModifFichier + ";" + tailleFichiers)
MonFichier.Close()

End If

End If

While i < NombreLignestxt

If lines(i).Contains(tab_search(z)) And lines(i).Contains(";A;") Then

tab_new(f) = tab_search(z)

f = f + 1

End If

i = i + 1

End While

z = z + 1
i = 0

End If

End If

Next


Catch so As Exception


Dim lines(1000) As String
Dim Fichier As String


For Each Fichier1 As String In My.Computer.FileSystem.GetFiles(Mypath(a), FileIO.SearchOption.SearchAllSubDirectories, "*" + Extension)

If Path.GetFileName(Fichier1).ToLower.Contains(Extension) Then

Fichier = CreateObject("Scripting.FileSystemObject").GetFileName(Fichier1)

Dim verif_MDF() As String = File.ReadAllLines(Fichier1)
If verif_MDF(0).Contains("MDF") Then

If Fichier1 <> "" Then

tab_search(z) = Fichier1

End If

If Not lines.Contains(Fichier1 + ";C;") And Not lines.Contains(Fichier1 + ";A;") And Not lines.Contains(Fichier1 + ";B;") Then

MonFichier = My.Computer.FileSystem.OpenTextFileWriter(path_txt, True)
MonFichier.WriteLine(Fichier1 + ";A;")
MonFichier.Close()

End If

While i < NombreLignestxt

If lines(i).Contains(tab_search(z)) And lines(i).Contains(";A;") Then

tab_new(f) = tab_search(z)

f = f + 1
End If

i = i + 1

End While

z = z + 1
i = 0

End If

End If



Next



End Try


End Sub
0
yg_be Messages postés 23531 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 22 avril 2025 1 579 > apprenti
Modifié le 30 mars 2018 à 11:28
ok, je vois comment tu as choisi de ne pas controller les repertoires, et je propose de faire autrement (sans donner la syntaxe correcte):
sub newfiles
   traiterdossier(getfolder(Mypath(a)))
end sub
private sub traiterdossier(undossier)
   for each dossier in undossier.subfolders
        traiterdossier(dossier)
   next dossier
   For Each Fichier1 As String In My.Computer.FileSystem.GetFiles(undossier.path, , "*" + Extension)
       ' ...
end sub 

ainsi, c'est toi qui contrôle les répertoires, sans utiliser l'option SearchAllSubDirectories
0
merci beaucoup ! je vais essayer cette méthode de suite :D
0