Récupérer tous les .JPG du PC [Résolu]

CLeBeR_FR 301 Messages postés mercredi 22 septembre 2010Date d'inscription 27 février 2018 Dernière intervention - 30 août 2012 à 11:58 - Dernière réponse : CLeBeR_FR 301 Messages postés mercredi 22 septembre 2010Date d'inscription 27 février 2018 Dernière intervention
- 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.
Afficher la suite 

Votre réponse

26 réponses

Meilleure réponse
Utilisateur anonyme - 8 nov. 2012 à 20:40
3
Merci
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

Merci Utilisateur anonyme 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 68 internautes ce mois-ci

Commenter la réponse de Utilisateur anonyme
Meilleure réponse
CLeBeR_FR 301 Messages postés mercredi 22 septembre 2010Date d'inscription 27 février 2018 Dernière intervention - 15 nov. 2012 à 19:16
3
Merci
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 !

Merci CLeBeR_FR 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 68 internautes ce mois-ci

Commenter la réponse de CLeBeR_FR
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 30 août 2012 à 12:11
0
Merci
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
Commenter la réponse de ucfoutu
CLeBeR_FR 301 Messages postés mercredi 22 septembre 2010Date d'inscription 27 février 2018 Dernière intervention - 30 août 2012 à 12:20
0
Merci
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 ?
Commenter la réponse de CLeBeR_FR
NHenry 14250 Messages postés vendredi 14 mars 2003Date d'inscription 10 août 2018 Dernière intervention - 30 août 2012 à 13:00
0
Merci
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
Commenter la réponse de NHenry
CLeBeR_FR 301 Messages postés mercredi 22 septembre 2010Date d'inscription 27 février 2018 Dernière intervention - 30 août 2012 à 14:01
0
Merci
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 ?
Commenter la réponse de CLeBeR_FR
Utilisateur anonyme - 30 août 2012 à 17:01
0
Merci
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)
Commenter la réponse de Utilisateur anonyme
CLeBeR_FR 301 Messages postés mercredi 22 septembre 2010Date d'inscription 27 février 2018 Dernière intervention - 30 août 2012 à 17:15
0
Merci
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.
Commenter la réponse de CLeBeR_FR
NHenry 14250 Messages postés vendredi 14 mars 2003Date d'inscription 10 août 2018 Dernière intervention - 1 sept. 2012 à 15:21
0
Merci
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
Commenter la réponse de NHenry
CLeBeR_FR 301 Messages postés mercredi 22 septembre 2010Date d'inscription 27 février 2018 Dernière intervention - 1 sept. 2012 à 18:37
0
Merci
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.
Commenter la réponse de CLeBeR_FR
Utilisateur anonyme - 1 sept. 2012 à 19:14
0
Merci
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.
Commenter la réponse de Utilisateur anonyme
Utilisateur anonyme - 1 sept. 2012 à 21:06
0
Merci
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.
Commenter la réponse de Utilisateur anonyme
CLeBeR_FR 301 Messages postés mercredi 22 septembre 2010Date d'inscription 27 février 2018 Dernière intervention - 1 nov. 2012 à 00:19
0
Merci
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
Commenter la réponse de CLeBeR_FR
NHenry 14250 Messages postés vendredi 14 mars 2003Date d'inscription 10 août 2018 Dernière intervention - 2 nov. 2012 à 14:04
0
Merci
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
Commenter la réponse de NHenry
CLeBeR_FR 301 Messages postés mercredi 22 septembre 2010Date d'inscription 27 février 2018 Dernière intervention - 8 nov. 2012 à 18:20
0
Merci
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 !
Commenter la réponse de CLeBeR_FR
NHenry 14250 Messages postés vendredi 14 mars 2003Date d'inscription 10 août 2018 Dernière intervention - 8 nov. 2012 à 19:00
0
Merci
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
Commenter la réponse de NHenry
CLeBeR_FR 301 Messages postés mercredi 22 septembre 2010Date d'inscription 27 février 2018 Dernière intervention - 8 nov. 2012 à 19:47
0
Merci
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.
Commenter la réponse de CLeBeR_FR
CLeBeR_FR 301 Messages postés mercredi 22 septembre 2010Date d'inscription 27 février 2018 Dernière intervention - 8 nov. 2012 à 22:51
0
Merci
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é ...
Commenter la réponse de CLeBeR_FR
Utilisateur anonyme - 9 nov. 2012 à 02:35
0
Merci
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.
Commenter la réponse de Utilisateur anonyme
CLeBeR_FR 301 Messages postés mercredi 22 septembre 2010Date d'inscription 27 février 2018 Dernière intervention - 9 nov. 2012 à 12:04
0
Merci
@cmarcotte
Salut,
J'ai compris ton explication mais je ne vois pas de quel gestionnaire tu me parles.
Commenter la réponse de CLeBeR_FR

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.