Getfiles() UnauthorizedAccesException

apprenti -  
 apprenti -
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

  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    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
    1. apprenti
       
      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
      1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > apprenti
         
        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
    2. apprenti
       
      merci beaucoup ! je vais essayer cette méthode de suite :D
      0