[dossiers] Comment comparer un ensemble

Résolu
HOOK Messages postés 353 Statut Membre -  
 fred -
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 !

--
HooK ~ "Un autre monde est possible, si..."
l'on passe à l'Attac !... ;o)

7 réponses

  1. JvDo Messages postés 1924 Date d'inscription   Statut Membre Dernière intervention   859
     
    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+
    0
  2. HOOK Messages postés 353 Statut Membre 63
     
    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
  3. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  4. HOOK Messages postés 353 Statut Membre 63
     
    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
  5. HOOK Messages postés 353 Statut Membre 63
     
    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
  6. fred
     
    bravo pour le code !

    merci ca m a aidé aussi
    0