IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Récupérer la taille des fichiers/dossiers dans une même variable [Débutant]


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2013
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2013
    Messages : 40
    Par défaut Récupérer la taille des fichiers/dossiers dans une même variable
    Bonjour,
    Je suis entrain de réaliser un petit programme de sauvegarde qui copiera certain dossiers et fichiers par défaut (profils utilisateurs) et d'autre choisit par l'utilisateur (à l'aide d'un treeview et listbox).
    Dans l'optique de faire une progressbar, est-il possible de créer une variable et de l'incrémenter de la taille des fichiers/dossiers copiers, sans savoir bien sur à l'avance quels seront les fichiers/dossiers copiés.
    Exemple:
    Je demande l’existence de plusieurs dossier pour les copier ce qui donnerai:
    Si tel dossier existe alors
    copie("", "")
    (et là si c'est possible, récupération de la taille du dossier pour incrémentation de tel variable)
    end if

    Pareil pour la copie des profils utilisateurs sachant que je ne récupère que certain dossiers et certain fichiers dans chaque profil.
    Pareil pour les dossiers sélectionnés par l'utilisateur (listés dans une listbox après sélection dans un treeview).
    Et la taille de tous ces fichiers/dossiers irait dans une seule et même variable.

    Je sais pas si j'ai été assez clair.
    Merci de votre aide.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juin 2010
    Messages : 210
    Par défaut
    Bonjour,

    Ici tu trouvera l'information voulu.

    http://msdn.microsoft.com/fr-fr/libr...v=vs.100).aspx

    Pour résumer.

    Tu récupère l'info d'un fichier.
    Tu as las property length qui te permet de connaître la taille en octet du fichier (c'est un long.)

    Tu additionnes le tout, et tu auras la taille total de tes fichiers.


    A+

  3. #3
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2013
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2013
    Messages : 40
    Par défaut
    Merci egautier18 pour ta réponse, je connaissais déjà la propriété ".Length", mais mon soucis était au début comment par exemple récupérer la taille de dossiers voulus dans chaque profil présent sur l'ordinateur, mais j'ai réussis à faire quelque chose par exemple en prenant le dossier "Favoris" de chaque profil mais pour l'instant j'arrive juste à l'afficher dans une msgbox.
    Je sais pas si mon code est correct mais pour l'instant il fonctionne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    Sub Taille_Favoris()
            Dim Profil As String
            Dim Users As String = My.Application.GetEnvironmentVariable("USERPROFILE").Substring(0, My.Application.GetEnvironmentVariable("USERPROFILE").LastIndexOf("\"))
            For Each Profil In System.IO.Directory.GetDirectories(Users)
                Dim di As New DirectoryInfo(Profil)
                Dim NomProfil As String = di.Name
                Dim attributeReader As System.IO.FileAttributes
                Dim checkFile As System.IO.DirectoryInfo
                checkFile = My.Computer.FileSystem.GetDirectoryInfo(Users & "\" & NomProfil)
                attributeReader = checkFile.Attributes
                If Directory.Exists(Users & "\" & NomProfil & "\Favorites") Then
                    Try
                        If (attributeReader And System.IO.FileAttributes.System) = System.IO.FileAttributes.ReparsePoint Then
                            Continue For
                        Else
                            MsgBox(FolderSize(Users & "\" & NomProfil & "\Favorites"))
                        End If
                    Catch erreur As Exception
                        My.Computer.FileSystem.WriteAllText(Drive & NomPC & "\Erreurs.txt", vbCrLf & "-" & erreur.Message & vbCrLf, True)
                    End Try
                End If
            Next
        End Sub
     
        Public Shared Function FolderSize(ByVal path As String) As Long
            Dim Drive As String = SelectDrives.ComboBox1.SelectedItem  'Drive = la lettre que l'on sélectionne dans la combobox
            Dim NomPC As String = Environment.MachineName  'variable d'environnement qui donne le nom du pc
            Dim size As Long = 0
            Dim directoryInfo As New DirectoryInfo(path)
            Dim files As IEnumerable(Of FileInfo) = directoryInfo.GetFiles("*", SearchOption.AllDirectories)
            For Each file As FileInfo In files
                Try
                    If (file.Attributes And FileAttributes.ReparsePoint) = FileAttributes.ReparsePoint Then
                        ' Ignorer le fichier
                        Continue For
                    Else
                        size += file.Length
                    End If
                Catch erreur As Exception
                    My.Computer.FileSystem.WriteAllText(Drive & NomPC & "\Erreurs.txt", vbCrLf & "-" & erreur.Message & vbCrLf, True)
                End Try
            Next
            Return size
        End Function
    Donc ils s'affiche tous dans la msgbox, mais j'aimerai en fait les additionner et retourner le résultat puis faire de même pour tous les dossier comme "mes documents", bureau, images, téléchargements....enfin tous ceux que je veux sauvegarder et les additionner à leurs tour pour avoir la taille de tous ce que je veux copier et l'utiliser dans la progressbar.

    Ou peut être qqu'un connait une autre manière beaucoup plus simple d'utiliser la progressbar lors d'une copie de plusieurs documents.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juin 2010
    Messages : 210
    Par défaut
    Bonjour,

    Si j'ai bien compris la question il te suffit au lieu de faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     MsgBox(FolderSize(Users & "\" & NomProfil & "\Favorites"))
    d'additionner le retour de FolderSize dans une propriété.
    tu déclares dans ta class/Form ou en début de ta méthode Taille_Favoris une propriété de type long qu'on appelera MyTotalSize
    et ensuite

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MyTotalSize += FolderSize(Users & "\" & NomProfil & "\Favorites")
    tout comme tu as pu le faire dans la méthode FolderSize.

    Non ? (désolé si j'ai pas compris du coup)

    A+

  5. #5
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2013
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2013
    Messages : 40
    Par défaut
    Ok merci, j'arrive maintenant à avoir la taille totale de toute ma sauvegarde, mais je n'arrive pas à incrémenter ma progressbar.
    voici mon code, j'utilise FolderSize comme pour "favoris" mais pour le dossier de destination (que j'appelle ici " NomPc" et "tailleN" pour sa taille) mais je sais pas si le processus réactualise tout le temps ta taille réel du dossier de destination pour que mon "FolderDestinationSize" s'incrémente tout seul.....sinon comment fait on?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     Function Taille_NomPc()
     
            Dim Users As String = My.Application.GetEnvironmentVariable("USERPROFILE").Substring(0, My.Application.GetEnvironmentVariable("USERPROFILE").LastIndexOf("\"))
            Dim tailleN As Double = 0
            If Directory.Exists(Drive & NomPC & "\") Then
                tailleN = FolderSize(Drive & NomPC & "\")
            End If
            Return tailleN
        End Function
     
        Sub progression()
            Dim FolderDestinationSize As Double = 0
            FolderDestinationSize = Taille_NomPc()
            ProgressBar1.Visible = True
            ProgressBar1.Minimum = 1
            ProgressBar1.Maximum = SizeCopie
            ProgressBar1.Value = FolderDestinationSize
            ProgressBar1.Step = 1
            ProgressBar1.PerformStep()
        End Sub
    Mis à par ça, comment sait-on lorsque la copie est fini si on a pas de progressbar, n'y a t il pas un moyen de savoir quand le processus de la copie s’arrête?
    Et ne peut-on utiliser l'activité du processus pour remplir la progressbar et aussi pour afficher dans un label.text le nom du fichier ou dossier copié en cours?
    Merci à toi egautier18

  6. #6
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Bonjour Bylliboy,

    Dans un 1er temps :

    Lorsque tu envisages des opérations de copie de répertoires de fichiers, des phases de calcul assez importantes : IL FAUT AU PREALABLE AVOIR SURVOLE LE COURS SUR LES THREADS (BackgroundWorker, Thread, ...etc.....) !
    Sinon tu risques d'être très rapidement embêté lorsque tu voudras mettre à jour ta partie UI de ton programme.

    Dans un 2ème temps :

    Toujours en lisant des bouquins, il ne faut pas négliger les possibilités offertes par les fonctions natives "Win32" (API ou Pinvoke) !
    Une très bonne base de données est dispo ici : http://www.pinvoke.net/

    Pour terminer :

    Afin d'implémenter une progression lors de la copie d'un fichier : http://www.pinvoke.net/default.aspx/kernel32.copyfileex
    Cela reste valable pour l'ensemble des fichiers d'un répertoire, à toi de prévoir l'algo !

    La meilleur solution qui s'offre à toi c'est le composant backgroundWorker, et oui y'a pas de secret : DE LA LECTURE pour les bonnes pratiques


    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 04/05/2012, 13h29
  2. Réponses: 2
    Dernier message: 24/03/2006, 09h55
  3. PHP5: charger des fichiers textes dans une base MYSQL
    Par koueletbak dans le forum Requêtes
    Réponses: 4
    Dernier message: 23/03/2006, 11h14
  4. [Conception] Stocker des fichiers multimédia dans une base de données
    Par haifa84 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 11/03/2006, 17h47
  5. Intégration des fichier XML dans une base de données MySQL
    Par bebemoundjou dans le forum XQUERY/SGBD
    Réponses: 8
    Dernier message: 25/11/2005, 22h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo