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

  1. #1
    Candidat au Club
    Trier des fichiers par taille descendante avec GetFiles sur ressource réseau mappée
    Bonsoir,

    Je me heurte depuis plusieurs heures à un problème de tri de fichiers en VB.NET.
    J'essaie de trier des fichiers de backup qui se trouvent sur un NAS. Le répertoire de ces fichiers est mappé sur mon PC comme disque Y
    J'essaie d'accéder à la liste des fichiers de la façon suivante :

    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
     
    .....
    Dim files() as String
    MyDir = "Y:\Backups\Sauvegarde Arthur"
     
    Try
        files = IO.Directory.GetFiles(MyDir, "*.bkp")
             ' Tri du plus grand au plus petit                
             files = files.OrderByDescending(
                      New Func(Of String, Integer)(Function(fn As String)
                                     Return New IO.FileInfo(fn).Length
                                     End Function)).ToArray
    ......
    Catch ex as Exception
       ...
    End Try


    Si la solution marche sur disque local, j'ai constamment le message d'erreur "Impossible de trouver une partie du chemin d'accès..." et pourtant le chemin MyDir existe bien sur le NAS...

    Quelqu'un pourrait-il m'aiguiller sur ce que je ne fais à priori pas bien ?

    Merci d'avance

    Philippe

  2. #2
    Membre chevronné
    Bonjour,
    Peut-être que si tu utilises un chemin et nom de dossier sans caractères blancs, accentués, ..., cela ira mieux.
    Soit le chemin suivant : Y:\Backup\Sauvegarde_Arthur
    (sans espace).
    Bonne journée...

  3. #3
    Candidat au Club
    Bonjour,

    Merci de la réponse.
    C'est effectivement quelque chose auquel j'ai pensé et que je vais tester, mais cela devrait logiquement être faisable aussi avec des noms longs et c'est là que je manque d'infos...

  4. #4
    Membre chevronné
    Oui, ça devrait ..., mais peut-être avec une syntaxe particulière.
    Les commandes lancées en ligne de commande (DEL par exemple) nécessitent de mettre des guillemets (je crois) pour que ça marche avec les longs noms, par exemple : DEL "Un long nom de fichier.TXT".

    J'espère que c'est la piste à suivre ...

  5. #5
    Candidat au Club
    Plus intéressant encore :
    Si j'utilise ce code sur mes deux machines via réseau local, çà fonctionne.
    Si je fais le même test sur une machine et le NAS, çà ne passe pas....Quelque chose à voir avec Samba ?
    Plus d'idée, là

  6. #6
    Membre chevronné
    Je viens de tester les commandes DOS avec les longs noms de fichiers (Dir > Fichier.txt et Dir > "Long Nom.TXT", Type "Long Nom.TXT") : il faut effectivement les guillemets.
    Pour ce qui est des NAS, ils sont généralement munis d'un OS archaïque. Cela expliquerait que ça fonctionne entre disques partagés sur des systèmes Win 8 ou Win 10 et que ça ne fonctionne pas avec un disque partagé sur un NAS. Note que le problème est moins le nom long que la présence d'un blanc, le blanc est un séparateur de mots dans les commandes systèmes.
    Note que s'il s'agit bien de la syntaxe, celle qui fonctionnera avec le NAS fonctionnera aussi sur les Windows.
    As-tu fait l'essai en changeant Sauvegardes Arthur en SauvegardesArthur ou Sauvegardes_Arthur, ou même en ArthurBK (seulement 8 caractères) ?

    ...

  7. #7
    Candidat au Club
    Oui, j'ai essayé et aucun résultat.
    Je me demande s'il ne faut pas utiliser de login/pw pour se connecter...
    J'aurais aussi dû préciser que j'essaie de lancer ce prog via le planificateur de tâche, donc est-ce que çà ne peut pas jouer ?
    Recherches, recherches

  8. #8
    Candidat au Club
    Je n'ai toutefois pas essayé avec des path en 8 lettres...Je vais tenter..

  9. #9
    Membre chevronné
    Login/Passwd... cela ne devrait plus être nécessaire une fois que la ressource est présente sous forme Y:

    Bonnes recherches...

  10. #10
    Candidat au Club
    Pour info, testé Y:\Backups\Test : pas mieux...
    Désespérant...
    Merci quand même. Quelqu'un d'autre aurait-il une idée lumineuse ?

  11. #11
    Membre chevronné
    Question probablement stupide ... mais quand même ...

    Est-ce que tu peux, avec l'explorateur de Windows, copier un fichier TXT quelconque de ton disque dur local vers l'unité Y:, dans le dossier que tu veux utiliser pour le backup ?

    Mon raisonnement est le suivant, si tu peux écrire dans ce dossier à partir de ton système local, alors il y a effectivement un problème dans ton application de backup.
    Mais si tu ne peux pas écrire dans ce dossier à partir de ton système local, alors c'est plutôt une question de droit d'écriture dans ce dossier du NAS.

    Une dernière pour la route (une piste), il convient de t'assurer que le NAS reçoit toujours la même IP. Dans le cas contraire, il est possible qu'il ne soit pas reconnu d'une fois à l'autre (c'est un cas de figure que j'ai rencontrer autrefois avec des imprimantes réseau).

    Bonne journée,


  12. #12
    Candidat au Club
    La nuit portant conseil, il semble que le problème soit résolu en remplaçant Directory.GetFiles par un bon vieux Dir("Y:\......") e en bouclant avec un aussi bon vieux do while...
    Pour ceux que cela pourrait aider aussi...

  13. #13
    Candidat au Club
    Alors, en fait, malheureusement ce n'est pas non plus la solution.
    De plus, il s'avère que ce problème n'existe que sur un seul des 5 pc du réseau local de notre association...Il est sous Win 10-2004
    - Pas de différence hardware avec les autres
    - Même version de dotnet (4.8)
    - J'ai désactivé temporairement antiivirus/firewall histoire de...
    - J'ai fait tourner sfc /scannow : pas de problème
    - copié/collé les mappages réseau incriminés dans l'explorateur : aucun souci

    Plus d'idées du tout sur ce que ce pc pourrait avoir qui cause ce problème.

    Voilà pour le cas où quelqu'un pourrait avoir une idée.

    Merci

    Philippe

  14. #14
    Membre chevronné
    Bonjour
    Refaire les tests d'écriture à partir de l'explorer du PC difficile.
    Si cela fonctionne, il n'existe aucune raison pour que ton programme ne puisse pas faire la même chose sauf peut-être le droit à l'utilisateur local d'écrire sur Y:.
    Pour cette dernière éventualité, tu peux faire le test en lançant l'EXE de ton programme avec " Exécuter en tant qu' administrateur ".
    ...

  15. #15
    Candidat au Club
    Citation Envoyé par Phil Rob Voir le message
    Bonjour
    Refaire les tests d'écriture à partir de l'explorer du PC difficile.
    Si cela fonctionne, il n'existe aucune raison pour que ton programme ne puisse pas faire la même chose sauf peut-être le droit à l'utilisateur local d'écrire sur Y:.
    Pour cette dernière éventualité, tu peux faire le test en lançant l'EXE de ton programme avec " Exécuter en tant qu' administrateur ".
    ...
    Bonjour,
    Les tests d'écriture sont sans problème
    Lancé l'EXE avec élévation Admin: aucun changement...
    Le même exe copié pour les tests sur les 5 machines fonctionne parfaitement sur les 4 autres, donc à priori aucune grosse erreur majeure dans le prog ou alors je vais perdre les cheveux qui me restent

    Merci pour les tentatives

  16. #16
    Membre chevronné
    Perso, je réviserais les droits réglés sur le NAS.
    Quoique si tu peux écrire avec l'explorer...
    Bonne soirée (quand même ))) )

  17. #17
    Expert éminent sénior
    Note: Si tu veux récupérer directement les tailles des fichiers, je te conseille d'utiliser directement DirectoryInfo.GetFiles() au lieu de Directory.GetFiles().
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  18. #18
    Candidat au Club
    Citation Envoyé par Médinoc Voir le message
    Note: Si tu veux récupérer directement les tailles des fichiers, je te conseille d'utiliser directement DirectoryInfo.GetFiles() au lieu de Directory.GetFiles().
    Bonjour,
    Merci de l'info mais en fait je trie les fichiers par taille et date descendante via LINQ et çà fonctionne parfaitement sur mes autres machines donc mystère...
    Philippe

###raw>template_hook.ano_emploi###