Parcourir l'userprofil

ircland Messages postés 99 Date d'inscription mardi 22 août 2006 Statut Membre Dernière intervention 9 septembre 2014 - 27 oct. 2011 à 23:26
NHenry Messages postés 15116 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 9 mai 2024 - 28 oct. 2011 à 22:04
Hopla,

en fait mon hic est que peut importe la méthode que j'utilise pour parcourir le dossier et sous dossiers, il y a la meme erreur...

Dans le userprofil ya des dossiers system (caché souvent...) comme appdata et compagnie... J'ai essayer toute sorte méthode pour skip les dossiers qui me block mais rien à faire... J'ai bien beau vouloir lire les attributs ou simplement le nom du fichier, mais il est déjà trop tard le programme plante au moment de lire les informations du dossier...

Que faire... mon but est de rechercher tout les images du UserProfil donc skip quelque dossier me dérange pas mais lui faire une liste de ce que je veux parcourir n'est pas envisageable car si ca sort des dossiers windows Mes Images par exemple... Chacun crée ses propre nom de dossier donc j'ai vraiment besoin de liste le Userprofil... Idéalement un solution pour Seven/Vista/XP est souhaitable mais sinon que pour XP c'est ok!

J'ai recherché pas mal et j'ai trouvé autre que 10 facons de lire des dossiers et attributs... kedal

Merci!

6 réponses

ircland Messages postés 99 Date d'inscription mardi 22 août 2006 Statut Membre Dernière intervention 9 septembre 2014
27 oct. 2011 à 23:30
P.S. le mode Admnistrateur ne résout même pas mon problème :(
0
NHenry Messages postés 15116 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 9 mai 2024 159
28 oct. 2011 à 00:22
Bonjour,

"le programme plante au moment de lire les informations du dossier"
Un message d'erreur ?

As-tu essayé un Try/Catch ?

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
28 oct. 2011 à 08:27
Bonjour,

S'il ne s'agit que de parcourir (donc sans rien ouvrir), je ne comprends pas ce qui pourrait provoquer une erreur
Sauf si est/sont quelque part présent(s) des fichiers corrompus (perte de l'EOF)

Question : que je passe-t-il lorsque tu cherches depuis l'explorateur ?

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ircland Messages postés 99 Date d'inscription mardi 22 août 2006 Statut Membre Dernière intervention 9 septembre 2014
28 oct. 2011 à 16:51
Hopla, en fait j'avais tirer de mauvaise conclusion, apres avoir regarder un beaucoup plus mon code avec des points d'arrets (ce qui signifie un max de points car il recherche dans tous les dossiers du profil utilisateur...) bref je me rends compte de quelques trucs bizzard... En autre :

(je test développe sous seven mais version final pour xp)
Avec seven en francais, dans l'explorateur il affiche un nom en francais des documents mais les urls sont en anglais... Si je vais dans Mes Documents, le dossier windows se nomme Documents (dans le userprofil bien sur...) Par contre, ma recherche récursive trouve un dossier Documents et un dossier Mes documents... Si je tente d'y acceder avec l'explorer windows à c:\Users\CrackCrack\Mes documents\ il me redirectionne vers le dossier Documents... Si je tente d'y acceder avec un autre type d'explorateur autre que lui de windows, c'est un dossier vide Mes documents... De plus les attributs de ce fichier sont hidden, system, notindexed si je me souviens bien.

Bon ceci ne fait pas planter le script mais plus loin lorsqu'il arrive dans le vrai dossier Documents. J'ai des fichiers invisible (non non pas caché, mais invisible car j'affiche les fichiers cachés...) et mon script trouve des dossier comme Ma Musique (alors que ce dossier se trouve en réalité dans Userprofil\Ma Musique... Et paf il plante acces interdit même en admin... Je tente de l'ouvrir avec l'explorateur et idem (normal) acces interdit...

Que sont ces fichiers et comment sauter ceux-ci ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ircland Messages postés 99 Date d'inscription mardi 22 août 2006 Statut Membre Dernière intervention 9 septembre 2014
28 oct. 2011 à 17:30
Bon voici mon qui n'est plus du tout optimiser, c'est vraiment pas beau comme code mais bon pour l'instant c'est ce code qui se rends le plus loin...

Imports System
Imports System.IO
Imports System.Collections
Imports System.Net

'Imports System.IO
Public Class frmMain
    Private files As List(Of String) = New List(Of String)
    Private directo As List(Of String) = New List(Of String)
    Private directo2 As List(Of String) = New List(Of String)
    Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Timer1.Start()
    End Sub


    Public Sub RechercherFichier(ByVal path As String)
        Timer1.Stop()
        Try
            frmLoad.lbStatut.Text = "Analyse en cours de l'ordinateur"

            RechercheDossier(path, directo)

            Dim msg As String = ""
            For Each cc As String In directo
                msg = msg + cc.ToString + vbCrLf
                RechercheDossier(cc.ToString, directo2)
            Next
            MsgBox("1" + msg)
            msg = ""
            For Each ccc As String In directo2
                    msg = msg + ccc.ToString + vbCrLf
                    RechercherFichier(ccc.ToString)
            Next
            MsgBox("2" + msg)
            frmLoad.lbStatut.Text = "Fin de l'anlyse, traitement en cours, patientez!"
            frmLoad.ProgressBar1.Maximum = files.Count
            frmLoad.ProgressBar1.Minimum = 0
            frmLoad.ProgressBar1.Step = 1
            'Application.DoEvents()
            msg = ""
            For Each File In files
                msg = msg + File.ToString + vbCrLf
                frmLoad.ProgressBar1.PerformStep()
            Next
            MsgBox("3" + msg)
        Catch e As Exception
            MsgBox(e.Message)
        End Try
        frmLoad.lbStatut.Text = "Fin du traitement"
        frmLoad.Close()

    End Sub

   

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        RechercherFichier(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile).ToString())
        '        RechercherFichier(Environment.GetFolderPath(Environment.SpecialFolder.Desktop).ToString + "\images")

    End Sub

    Public Sub RechercherFichier(ByVal path As String)
        Dim extension As New ArrayList
        Dim Explode() As String
        extension.Add("jpg")
        extension.Add("jpeg")
        extension.Add("bmp")
        extension.Add("png")
        extension.Add("gif")
        extension.Add("tif")
        extension.Add("tiff")
        Dim objImage As System.Drawing.Image
        Try
            For Each Fichier As String In My.Computer.FileSystem.GetFiles(path, FileIO.SearchOption.SearchAllSubDirectories)
                Explode = path.ToLower.Split(".")
                If (extension.Contains(Explode(Explode.Length - 1).ToLower)) Then
                    objImage = System.Drawing.Image.FromFile(path)
                    If (objImage.Width >= 200 And objImage.Height >= 200) Then
                        files.Add(path)
                    End If
                Else
                End If
            Next
        Catch e As Exception
            MsgBox("." + e.Message)
        End Try
    End Sub

    Public Sub RechercheDossier(ByVal path As String, ByVal listt As List(Of String))
        Try
            Dim rootInfo As DirectoryInfo = New DirectoryInfo(path)
            For Each d As DirectoryInfo In rootInfo.GetDirectories()
                If (Not d.Attributes.ToString.Contains(FileAttributes.NotContentIndexed.ToString)) Then
                    listt.Add(d.FullName)
                    RechercheDossier(d.FullName, listt)
                End If
            Next
        Catch e As Exception
            MsgBox(e.Message)
        End Try
    End Sub
End Class



la msgbox1 c'Est la liste des dossiers parcourir du userprofil, la msgbox#2 c'est la liste complet de tous les dossiers à regarder pour les fichiers... la msgbox #3 est supposé etre la liste de tt les fichiers [images] à traiter...

fait étrange... la msgbox1 est ok, la #2 n'apparait simplement pas (POURQUOI?) et la #3 est vide...

Si mon programme plante dans la deuxieme boucle qui traite tous les dossiers, pourquoi le try-catch n'embarque pas et pourquoi la msgbox #2 est inexistence et non vide comme la #3 ? c'est drole car a la suite de mon msgbox le code suivant s'excute... hmmmmmmmmmmm
0
NHenry Messages postés 15116 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 9 mai 2024 159
28 oct. 2011 à 22:04
Bonjour,

Remarques générales :
cc.ToString
cc étant déjà un String, l'utilité de la chose ne me semble pas évident.

vbCrLf est à remplacer par Environment.NewLine
MsgBox par MessageBox.Show

Retires aussi l'import automatique de Microsoft.VisualBasic dans les propriétés du projet.

Pour récupérer l'extension du fichier, il y a je pense le nécessaire dans System.IO.Path.GetFileExtension (ou approchant)

As-tu testé en, pas à pas et espionné les valeurs ?
Je n'ai pas testé le code, je suis trop chargé actuellement, dsl.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
0
Rejoignez-nous