[dossiers] Comment comparer un ensemble

Résolu/Fermé
HOOK Messages postés 338 Date d'inscription lundi 21 octobre 2002 Statut Membre Dernière intervention 4 juin 2021 - 28 févr. 2006 à 13:42
 fred - 1 nov. 2006 à 13:15
Bonjour,

Via mon réseau local, j'ai voulu transférer le contenu de "Mes documents" (dossiers, sous-dossiers, fichiers, etc...) d'un PC A vers un PC B, soit... quelques gigas de données. Le lendemain, j'ai vu que le transfert s'était planté pour un problème de nom de fichier trop long (je pense : chemin d'accès + nom fichier > 256 caractères). De rage (je peux être coléreux de bon matin...), j'ai fermé la fenètre indiquant l'anomalie... et donc je me retrouve dans une situation où il devient impossible de trouver tous les sous-répertoires et fichiers manquants sur PC B.

Connaîtriez-vous...

1. un utilitaire capable de scanner un ensemble de dossiers, voire une partition complète, et qui indiquerait tous les chemin d'accès + noms trop longs pour un manipulation de fichiers

et/ou

2. un utilitaire capable de me dire quels sont les dossiers, sous-dossiers,... sous-sous dossiers..., fichiers présents sur le PC A et absents du PC B. Jusqu'à présent, je ne trouve que des utilitaires qui font une comparaison du contenu de tous les fichiers de dossiers différents.

D'avance, merci !

7 réponses

JvDo Messages postés 1978 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 28 septembre 2020 858
28 févr. 2006 à 23:00
Bonsoir,

un petit message court pour résoudre ton problème :
Option Explicit
     Public dossier
     Public Type BROWSEINFO
        hOwner As Long
        pidlRoot As Long
        pszDisplayName As String
        lpszTitle As String
        ulFlags As Long
        lpfn As Long
        lParam As Long
        iImage As Long
     End Type
     '32-bit API declarations
     Declare Function SHGetPathFromIDList Lib "shell32.dll" _
     Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As Long
     Declare Function SHBrowseForFolder Lib "shell32.dll" _
     Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long
Function GetDirectory(Optional Msg) As String
     Dim bInfo As BROWSEINFO
     Dim path As String
     Dim r As Long, x As Long, pos As Integer
     bInfo.pidlRoot = 0&
     If IsMissing(Msg) Then
     bInfo.lpszTitle = ""
     Else
     bInfo.lpszTitle = Msg
     End If
     bInfo.ulFlags = &H1
     x = SHBrowseForFolder(bInfo)
     path = Space$(512)
     r = SHGetPathFromIDList(ByVal x, ByVal path)
     If r Then
     pos = InStr(path, Chr$(0))
     GetDirectory = Left(path, pos - 1)
     Else
     GetDirectory = ""
     End If
End Function
Sub Arborescence_simple_Dossier()
'Objectif : créer une liste du contenu d'un répertoire
'
Dim fs, i, j, nomfich, FileNumber, specfichier, nbfichiers
Dim fso As New FileSystemObject
dossier = GetDirectory("choisissez le dossier à traiter")
If dossier <> "" Then
    Set fs = Application.FileSearch
    With fs
        .LookIn = dossier
        .SearchSubFolders = True
        '.Filename = "*.js"
        .FileType = msoFileTypeAllFiles
        If .Execute() > 0 Then
            nbfichiers = .FoundFiles.Count
            MsgBox "Ce dossier contient " & nbfichiers & " fichier(s) répondant aux critères."
            j = 2
            For i = 1 To nbfichiers
                specfichier = .FoundFiles(i)
                Cells(j, 1) = specfichier
                j = j + 1
           Next i
        Else
            MsgBox "Aucun fichier n'a été trouvé."
        End If
    End With
    Columns("A:A").Select
    Selection.Insert Shift:=xlToRight
    Range("A2").Select
    ActiveCell.FormulaR1C1 = "=LEN(RC[1])"
    Range("A2").Select
    Selection.AutoFill Destination:=Range("A2:A" & nbfichiers + 1)
    Range("A1").Select
    ActiveCell.FormulaR1C1 = "longueur"
    Range("B1").Select
    ActiveCell.FormulaR1C1 = "chemin_fichier"
    Range("A2").Select
    Columns("B:B").EntireColumn.AutoFit
    Range("A1").Select
    Selection.AutoFilter
    Selection.AutoFilter Field:=1, Criteria1:=">255", Operator:=xlAnd
End If
End Sub
tu copies ce code dans un module macro d'une feuille excel et tu lances Arborescence_simple_Dossier.

ne pas oublier de référencer Microsoft scripting runtime (menu outils/références... dans VBA)

A+
2
HOOK Messages postés 338 Date d'inscription lundi 21 octobre 2002 Statut Membre Dernière intervention 4 juin 2021 63
28 févr. 2006 à 17:21
Merci mon vieux Bison !.... mais... j'ai du mal m'expliquer : j'ai toujours toutes mes données sur le pc A (j'ai lancer un copier/coller). Je n'ai donc pas de données à récupérer (j'ai déjà les outils pour ça !).

Vu la quantité de répertoires, sous-répertoires, etc et fichiers, je ne veux/peux pas m'en sortir avec un contrôle visuel.

Donc, soit je peux connaître le ou les fichiers de pc A qui vont bloquer le "copier/coller" vers le pc B du fait de la longueur de la chaîne de caractères constituant le chemin en appliquant la solution 1, soit je peux connaître le delta exact entre pc A et pc B (solution 2) et je me débrouille de corriger les chemins trop longs et de relancer le "copier/coller".

En tous cas, merci d'avoir rassemblé toutes ces infos !
0
vieu bison boiteu Messages postés 44312 Date d'inscription lundi 11 avril 2005 Statut Contributeur Dernière intervention 18 octobre 2024 Ambassadeur 3 553
28 févr. 2006 à 20:50
0

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

Posez votre question
HOOK Messages postés 338 Date d'inscription lundi 21 octobre 2002 Statut Membre Dernière intervention 4 juin 2021 63
28 févr. 2006 à 22:28
Voilà qui commence à mieux me convenir ! :-)
Je teste tout ça et je te tiens au courant. Je vais aussi essayer "SuperCopier" dont on m'a dit beaucoup de bien.

Merci et à bientôt pour le résultat de mon transfert !
0
HOOK Messages postés 338 Date d'inscription lundi 21 octobre 2002 Statut Membre Dernière intervention 4 juin 2021 63
1 mars 2006 à 10:30
Pour Vieu bison boiteu (boiteu... par absence de "x" ?) : merci pour cette redécouverte du XCOPY. Le petit soft développé en VB est excellent... en revanche, il ne traite pas les noms supérieurs au 256 c (je n'ai pas essayé la fonction de renommage en noms courts DOS parce que je ne m'y retrouverai pas plus ensuite). Donc, si le XCOPY ne plante pas avec le bon commutateur, le résultat final n'est pas meiilleur dans mon cas.

Pour JvDo : alors là, chapeau bas ! Ta macro marche du feu de Dieu ! C'est génial ! J'avais bien envisagé une opération manuelle en 2 temps (récup dans un fichier texte de toute l'arborescence d'un lecteur, import sous Excel et macro pour compter et mettre en évidence les chemins trop longs). Mais là, c'est de l'instantané et du "tout en un" !!! Encore merci !

Problème résolu donc ! A tchao !
0
bravo pour le code !

merci ca m a aidé aussi
0