Récupérer tous les .JPG du PC

Résolu
Utilisateur anonyme - 30 août 2012 à 11:58
 Utilisateur anonyme - 15 nov. 2012 à 19:16
Bonjour,
je voudrais faire un logiciel qui permet de récupérer les .JPG du PC ( en scannant tous les disque dur ... )

Je me suis inspiré d'un code que j'ai trouvé sur le forum puis je l'ai transformé pour créer mon programme. Le soucis c'est que si je définis le disque à scanner moi même ( soit C:\ ) j'ai une erreur d'accès à document and setting et si pour définir les disques à scanner j'utilise mon code qui scanne tous les disques du PC, il ne se passe rien. Voici le code :


Imports System.IO
 
Public Class Form1
 
    Private Function RécupérerFichiersImage()
        Dim arDrives() As String
        arDrives = Directory.GetLogicalDrives()
        Return arDrives
 
        For Each Fichier As String In My.Computer.FileSystem.GetFiles(arDrives.ToString, FileIO.SearchOption.SearchAllSubDirectories)
            If Path.GetFileName(Fichier).ToLower.Contains(".JPG") Then
                My.Computer.FileSystem.MoveFile(Fichier, "C:\Users\CLeBeR\Desktop")
            End If
        Next
    End Function


Merci de l'aide que vous pourrez m'apporter.

26 réponses

Utilisateur anonyme
8 nov. 2012 à 20:40
Je me suis permis de faire un bout de code.
Si tu as plusieurs disques, la recherche peut être assez longue et il faudrait alors mettre en oeuvre un thread.

Option Strict On
Public Class Form1
    'ajout d'une listbox
    Dim liste As New ListBox With {.Parent Me, .Width 400, .Height = 400}
    'ajout d'un picturebox
    Dim box As New PictureBox With {.Parent Me, .Bounds New Rectangle(400, 0, 400, 400), .SizeMode = PictureBoxSizeMode.AutoSize}

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        'redimmension formulaire
        Me.Size = New Size(800, 450)
        'ajout événement à l'objet liste
        AddHandler liste.SelectedIndexChanged, AddressOf listeclick
        'recherche dans tous les disques
        For Each drive As IO.DriveInfo In IO.DriveInfo.GetDrives
            If drive.IsReady Then
                'ici je recherche les jpg ainsi que les gif
                ChercheImages(New IO.DirectoryInfo(drive.RootDirectory.ToString), {"jpg", "gif"})
            End If
        Next
    End Sub

    Private Sub listeclick(sender As Object, e As EventArgs)
        'affiche l'image sélectionnée dans picturebox
        Using reader As New IO.FileStream(liste.Text, IO.FileMode.OpenOrCreate)
            box.Image = Image.FromStream(reader)
        End Using
    End Sub

    Private Sub ChercheImages(dossier As IO.DirectoryInfo, Extensions() As String)
        Try
            'pour chaque extension...
            For Each ext As String In Extensions
                '...on fait une liste des fichiers concernés...
                Dim f() As IO.FileInfo = dossier.GetFiles("*." & ext)
                '...et on ajoute les fichiers à la listbox
                For Each img As IO.FileInfo In f
                    liste.Items.Add(img.FullName)
                Next
            Next
            'recherche des sous-dossiers...
            For Each d As IO.DirectoryInfo In dossier.GetDirectories
                'et recherche récursive des fichiers
                ChercheImages(d, Extensions)
            Next
        Catch ex As Exception

        End Try
    End Sub
End Class
3
Utilisateur anonyme
15 nov. 2012 à 19:16
Bon juste pour vous dire que j'ai résolu le problème de la copie des fichiers de la listbox.
Code :
    Private Sub CopyDesFichiers()
        Dim file As FileInfo
        For Each fileitem In ListboxFichiersTrouvés.Items
            file = New FileInfo(fileitem.Value)
                file.CopyTo(Path.Combine(Application.StartupPath, file.Name), True)
        Next
 
    End Sub


Donc sujet complètement résolu !
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
30 août 2012 à 12:11
Bonjour,
Ton OS ne serait pas (entre autres possibilités) Win 7 ?
Si oui : dossier protégé !


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
Utilisateur anonyme
30 août 2012 à 12:20
Exact, j'ai oublié de préciser Windows 7 64 Bit, mais pourtant j'utilise le compte administrateur ( celui crée quand j'ai formaté le PC ) Et il n'y a pas un moyen de donner les droits au logiciel ?
0

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

Posez votre question
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
30 août 2012 à 13:00
Bonjour,

Le dossier System Volume Information est limité à System et génère systématiquement une exception.

Donc, soit tu ne scannes que certains dossiers, soit tu fais ta procédure de scan des dossiers (fonction récursive).

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]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
Utilisateur anonyme
30 août 2012 à 14:01
Salut,
Il faudrait que je scanne tous les dossiers et sous dossiers puis que je liste les fichiers .JPG et que je copie tous les fichiers qui ont été listés ?
0
Utilisateur anonyme
30 août 2012 à 17:01
Bonjour,

Juste avec cette ligne :

 If Path.GetFileName(Fichier).ToLower.Contains(".JPG") Then


C'est garanti que tu ne récupèras rien sauf si tu as mis

Option compare text


Parce que ton IF est patenté pour chercher des majuscules (".JPG") dans un texte mis en minuscules (ToLower)
0
Utilisateur anonyme
30 août 2012 à 17:15
Salut,
j'ai mis l'option mais il ne se passe toujours rien, en revanche si je met C:\ il n'y a plus l'erreur.
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
1 sept. 2012 à 15:21
Bonjour,

"il n'y a plus l'erreur", problème résolu ou pas ?

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=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]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
Utilisateur anonyme
1 sept. 2012 à 18:37
Salut,
non mon problème n'est hélas toujours pas résolu, ne vous inquiétez pas je le passerai en résolu des que le problème sera réglé, j'ai l'habitude.
0
Utilisateur anonyme
1 sept. 2012 à 19:14
Bonjour

En y regardant de plus plus près, je pense que tu devrais sortir tes lignes de ta fonction.

  For Each Fichier As String In My.Computer.FileSystem.GetFiles(arDrives.ToString, FileIO.SearchOption.SearchAllSubDirectories)
            If Path.GetFileName(Fichier).ToLower.Contains(".JPG") Then
                My.Computer.FileSystem.MoveFile(Fichier, "C:\Users\CLeBeR\Desktop")
            End If
        Next


Parce que ton Return signifie la sortie de la fonction et que, en principe, les opérations de copie/déplacement ne sont de toutes façons interdites ou mal tolérées dans des Function(). En principe la seule chose que peut faire une function() c'est retourner un résultat. Mais là, je dois quitter parce que la batterie du portable est en train de crier famine.
0
Utilisateur anonyme
1 sept. 2012 à 21:06
Bonsoir,

non mon problème n'est hélas toujours pas résolu
Il aurait pu l'être si tu avais suivi les conseils de NHenry (que je salue) dans son premier post
NHenry à dit :


Donc, soit tu ne scannes que certains dossiers, soit tu fais ta procédure de scan des dossiers (fonction récursive).

GetFiles plantera à coups sûrs sur les dossiers protégés.
0
Utilisateur anonyme
1 nov. 2012 à 00:19
Salut les gars,
sur le site j'ai trouvé le projet de Henry http://www.vbfrance.com/codes/BIBLIOTHEQUE-ANALYSE-RECUPERATION-RECURSIVE-FICHIERS_34372.aspx
Je l'ai récupéré et j'ai copier les parties qui m’intéressent. Lors que la compilation tout se passe bien, mais lorsque j’appuie sur le bouton pour scanner les dossiers rien ne se passe, je demande donc plus particulièrement à Henry, est-ce que tu peux jeter un coup d’œil à mon projet ?
Merci.
https://dl.dropbox.com/u/79764502/Sauvegarde%20Fichiers.zip
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
2 nov. 2012 à 14:04
Bonjour,

En quoi consiste ces modifications ?

Sinon, la bibliothèque est faite pour .NET2, donc certaines choses ont peut être changer depuis (les threads par exemple, je ne les gères plus de la même manière).

Sinon, voir en adaptant :
http://www.codyx.org/snippet_taille-dossier-sous-dossiers-octets_34.aspx

Ce sera plus léger et je pense, plus adapté à ton besoin.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]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
Utilisateur anonyme
8 nov. 2012 à 18:20
Salut gcorbineau,
j'ai recommencé mes recherches sur la méthode récursive, et j'ai trouvé cet excellent article sur le site de Mircrosoft, http://support.microsoft.com/kb/306666/fr
Mais j'ai un problème, lorsque je copie le code comme demandé dans la partie "Exemple de code complet" mais il y avait des erreurs ( celle de la remarque un peu plus bas ) Je me suis dit, c'est pas grave je vais juste copier le code et créer moi même les composants c'est a dire :
btnSearch = Button()
lblFile = Label()
cboDirectory = ComboBox()
txtFile = TextBox()
lstFilesFound = ListBox()
lblDirectory = Label()

J'ai ensuite copié le code :

    Private Sub btnSearch_Click(ByVal sender As System.Object, _
            ByVal e As System.EventArgs) Handles btnSearch.Click
        lstFilesFound.Items.Clear()
        txtFile.Enabled = False
        cboDirectory.Enabled = False
        btnSearch.Text = "Searching..."
        Me.Cursor = Cursors.WaitCursor
        Application.DoEvents()
        DirSearch(cboDirectory.Text)
        btnSearch.Text = "Search"
        Me.Cursor = Cursors.Default
        txtFile.Enabled = True
        cboDirectory.Enabled = True
    End Sub

    Sub DirSearch(ByVal sDir As String)
        Dim d As String
        Dim f As String

        Try
            For Each d In Directory.GetDirectories(sDir)
                For Each f In Directory.GetFiles(d, txtFile.Text)
                    lstFilesFound.Items.Add(f)
                Next
                DirSearch(d)
            Next
        Catch excpt As System.Exception
            Debug.WriteLine(excpt.Message)
        End Try
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, _
            ByVal e As System.EventArgs) Handles MyBase.Load
        Dim s As String
        cboDirectory.Items.Clear()
        For Each s In Directory.GetLogicalDrives()
            cboDirectory.Items.Add(s)
        Next
        cboDirectory.Text = "C:"
    End Sub


Aucune erreur de compilation, mais lorsque je cherche, le programme ne trouve rien et donc la listbox n'ajoute aucun composant.
J'espère que tu va trouver ce qu'il se passe, personnellement j'ai relu le code plusieurs fois et je ne comprends pourquoi ça ne marche pas, en plus c'est exactement le code qu'il me faut !
Merci de ton aide !
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
8 nov. 2012 à 19:00
Bonjour,

Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).

As-tu regardé en pas à pas pour voir comment réagit le programme (en espionnant les variables) ?
Quels filtres as-tu utilisé dans txtFile.Text ?

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]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
Utilisateur anonyme
8 nov. 2012 à 19:47
Salut,
oui j'utilise la balise code normalement, mais là j'ai zappé puisque j'ai copié le message en partant d'un des mes autres posts sur un autre forum qui n'utilise pas les mêmes balises.
Alors j'ai fais un pas à pas et une exception se produit à un moment donné :


Dans le filtre j'ai essayé *.dll ou *.JPG et même rien, quand je met rien il cherche assez longtemps mais n'affiche rien non plus.
0
Utilisateur anonyme
8 nov. 2012 à 22:51
Voilà ... 3 mois de recherches QUI ONT ENFIN ABOUTIES !!!!!
Merci banana32 !!!!!!!!!!!!

Par contre banana j'ai du déplacer les procédures du chargement du formulaire et les placer dans l’évènement clique du bouton car le formulaire n'apparaissait pas si non, et y a aussi un truc qui se passe je sais pas si c'est normal quand je clique sur un item, une erreur apparait comme quoi l'accès est refusé ...
0
Utilisateur anonyme
9 nov. 2012 à 02:35
Bonjour,


Par contre banana j'ai du déplacer les procédures du chargement du formulaire et les placer dans l’évènement clique du bouton car le formulaire n'apparaissait pas si non, et y a aussi un truc qui se passe je sais pas si c'est normal quand je clique sur un item, une erreur apparait comme quoi l'accès est refusé ...


Regarde dans le gestionnaire si l'hospice de chien sale de tabarouette de joualvert de simonac d'indexation est en cause. Le chien sale fout les fichiers en lecture seule quand il fait son hospice d'indexation. Il faut décocher Lecture seule dans l'Explorateur. Mais aussitôt qu'il a vu que lecture seule est décochée, le chien sale la remet.
0
Utilisateur anonyme
9 nov. 2012 à 12:04
@cmarcotte
Salut,
J'ai compris ton explication mais je ne vois pas de quel gestionnaire tu me parles.
0
Rejoignez-nous