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 :

Supprimer un dossier locké


Sujet :

VB.NET

  1. #1
    Invité
    Invité(e)
    Par défaut Supprimer un dossier locké
    Chalut tout le monde.

    J'ai fait un petit programme qui permet de créer un fichier texte que j'enregistre dans un dossier temporaire (que je nomme TEMP).
    Si mon programme dit que ce dossier temporaire existe déjà, il le supprime, en faisant le code suivante:
    Code VB : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            If IO.Directory.Exists(local_adresseTEMP) Then
                IO.Directory.Delete(local_adresseTEMP, True)
            End If


    Jusque là, tout marchait impeccable, et hier, un soucis s'était installé : le dossier TEMP ne pouvait pas être supprimé, l'erreur ainsi remontée disait que le chemin vers ce fichier texte était en "access denied" (accès refusé). J'ai alors essayé de supprimer manuellement ce dossier, ça n'a pas marché, ni même le fichier qui s'y trouvait.
    J'ai alors essayé de me connecter sur le serveur de notre client, là où ce dossier temporaire est crée, et là, la suppression s'est passée sans problème, ce qui a permis à notre client de refaire fonctionner mon programme.

    Je me demandais alors s'il y aurait un moyen pour pouvoir supprimer ce dossier temporaire sans qu'il y ait d’accrochage, comme ça a été le cas?
    Dernière modification par Invité ; 21/11/2014 à 11h41.

  2. #2
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2013
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2013
    Messages : 235
    Points : 359
    Points
    359
    Par défaut
    Chaluts aussi,

    On dirait que ton fichier texte est déjà ouvert par un tiers...
    Ça pourrait peut-être t'aider ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
            ' à la création :
            Dim dir = New System.IO.DirectoryInfo("c:\temp")
            dir.Attributes = dir.Attributes And Not System.IO.FileAttributes.[ReadOnly]
            'suppréssion
            dir.Delete()
    A +
    Par nature les mots, ils sont flous, c'est une fois alignés qu'ils se précisent.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Chalut,

    seulement voilà, j'ai fait un projet de type console, entre le moment où je créée mon dossier temporaire et le moment ou je le détruis, il doit y avoir un temps d’exécution de l'ordre du dixième de seconde, je ne vois pas pas une quelconque personne pourrait avoir le temps d'ouvrir l'unique fichier qui s'y trouve...

    Sinon, j'ai essayé ton code, il ne marche pas de mon côté, j'ai mis cela:
    Code VB : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
            global_dir = New System.IO.DirectoryInfo(local_adresse) 'variable globale ici
            If global_dir.Exists Then
                global_dir.Attributes = global_dir.Attributes And Not System.IO.FileAttributes.ReadOnly
                global_dir.Delete(True)
            Else
                global_dir.Create()
               'quand me créée mon fichier, cette ligne fait planter le programme
               'erreur : Valeur d'attributs de fichier ou de répertoire non valide
                global_dir.Attributes = global_dir.Attributes And Not System.IO.FileAttributes.ReadOnly 
               'j'ai alors remplacé la ligne précédente par : global_dir.Attributes = FileAttributes.Temporary
               'le message d'erreur reste inchangé
            End If

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 267
    Points : 0
    Points
    0
    Par défaut
    Bonjour, as-tu essayer Form1_Load => tu créer un dossier et dans Form1_FormClosing =>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If File.Exists("le chemin du dossier") Then
                File.Delete("le chemin du dossier")
            End If
    cordialement,

  5. #5
    Invité
    Invité(e)
    Par défaut
    re-bonjour. Comme je l'ai dis dans mon précédent message, j'ai un projet de type console, donc je n'ai pas d'élément Form1.
    Sinon, je n'ai pas essayé ton truc mais est-ce que ça peut marcher? En anglais, le mot "file" veut dire "fichier", peut-il être utilisé sur un dossier?

  6. #6
    Membre émérite Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Points : 2 528
    Points
    2 528
    Par défaut
    Le code de hacker59 ne s'applique qu'aux fichiers.

    Ce code (que tu a s récupérés) correspond donc exactement aux même mais avec les dossier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     global_dir = New System.IO.DirectoryInfo(local_adresse) 'variable globale ici
            If global_dir.Exists Then
    Mais tu as dis que ça, ça ne marchait pas ? Il refuse toujours de le supprimer ?

    Je pense pas que le problème soit une question d'autorisations sur le dossier, quand tu créer le dossier les droits doivent être basique.
    Pour tester, execute du code qui ne fait QUE créer le dossier, va voir dans Windows les droits du dossier, si il n'est pas readonly, alors ce n'est pas le problème.

    Moi je pense plutôt à un problème Windows, un truc qui pourrait être que le dossier contient un fichier ouvert par exemple...
    Ou suppression trop rapide...

    Et quand tu as ton exception, tu n'as pas plus de détail à part Access Denied ? Y'a pas de Inner Exception ou des détails ?
    L'avenir appartient à ceux... dont les ouvriers se lèvent tôt. (Coluche)

  7. #7
    Invité
    Invité(e)
    Par défaut
    C'est ce à quoi je pensais, c'est pour cela que je ne l'ai pas testé.

    Au sujet du code que j'ai repris de ACIVE_CS, j'ai mis en commentaire l'erreur rencontrée, qui a lieu que lorsque le dossier temporaire n'existe pas, quand je lui affecte des attributs.

    Par rapport à ce que j'avais fais, j'aimerais bien "tester" de nouveau mais comment faire, si l'erreur ne se produit pas à chaque fois? est-ce le fait de devoir créer un dossier sur un serveur distant, et non en local, doit être considéré autrement? Actuellement, l'utilisateur a accès sur ce serveur, il a tous les droits.
    Je t'envoie la capture d'écran de notre client, montrant le message d'erreur ainsi obtenu Nom : denied.png
Affichages : 229
Taille : 88,6 Ko

  8. #8
    Membre émérite Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Points : 2 528
    Points
    2 528
    Par défaut
    Au sujet du code que j'ai repris de ACIVE_CS, j'ai mis en commentaire l'erreur rencontrée, qui a lieu que lorsque le dossier temporaire n'existe pas, quand je lui affecte des attributs.
    -> Dans le code que tu as mis tu testes l'existence... donc pas de souci, non ?


    Par rapport à ce que j'avais fais, j'aimerais bien "tester" de nouveau mais comment faire, si l'erreur ne se produit pas à chaque fois?
    -> Si ça ne se produit pas à chaque fois, c'est donc que ce n'est pas un problème de droit... a priori. A moins que se soit un utilisateur avec les droits pour créer et pas supprimer qui a été utilisé... Le plus simple pour ce genre de situation c'est de créer un dossier "libre de droit" dans lequel tu vas venir créer/détruire ton dossier temporaire, comme ça, quel que soit l'utilisateur, tout le monde est assurer de pouvoir supprimer.

    Pour tester... A part faire une boucle qui va effectuer le même truc x fois... Essayer pleins d'utilisateur... Peut être même que que ton application est lancé plusieurs fois, par plusieurs utilisateurs... tandis que l'un créer, l'autre supprime, t'y a pensé ?


    est-ce le fait de devoir créer un dossier sur un serveur distant, et non en local, doit être considéré autrement?
    -> A priori non... Mais bon avec le réseau, les domaines, les utilisateurs... on est jamais à l'abri.
    L'avenir appartient à ceux... dont les ouvriers se lèvent tôt. (Coluche)

  9. #9
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par mactwist69 Voir le message
    -> Pour tester... A part faire une boucle qui va effectuer le même truc x fois... Essayer pleins d'utilisateur... Peut être même que que ton application est lancé plusieurs fois, par plusieurs utilisateurs... tandis que l'un créer, l'autre supprime, t'y a pensé ?
    ça aurait du sens du coup, j'avais un contact qui m'avait demandé de paramétrer 3 pc afin qu'ils puissent de se servir de mon programme (dans lequel des paramètres d'entrée sont utilisés), puis, j'ai dû changer d'interlocuteur qui m'avait demandé de paramétrer 3 autres pc, du coup, il pourrait y avoir un souci comme tu viens de le souligner, où plusieurs utilisateurs utilisent en même temps mon programme... chose qui aurait du sens pour le coup... Comme quoi, notre client aime bien me faire râler et ce n'est pas chose nouvelle, lol

    Au sujet du soucis dans le code de ACIVE_CS, si le dossier temporaire n'existe pas, ok, ça marche. Dans le cas contraire, la création du dossier se fait bien, mais lorsque je veux lui attribuer des attributs, ça plante

  10. #10
    Membre émérite Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Points : 2 528
    Points
    2 528
    Par défaut
    Ahhhhhhhhhh l'attaque concurrente du même dossier... Classique.
    Va falloir trouver un contournement (création distinct d'un dossier par PC par exemple...)

    Quand au changement de droits... Mon avis, ça ne sert à rien dans ton cas.
    C'était pour le cas où tu souhaitais supprimer un dossier en lecture seule... Or il ne s'agit pas de ton problème, donc pour moi, supprime cette fonctionnalité.
    L'avenir appartient à ceux... dont les ouvriers se lèvent tôt. (Coluche)

  11. #11
    Invité
    Invité(e)
    Par défaut
    J'ai tout remis d'origine.
    Donc du coup, afin d'éviter cette compétition, qui consiste à être le plus rapide pour faire tourner mon programme, serait-il intéressant de nommer le dossier temporaire ainsi :
    Code VB : Sélectionner tout - Visualiser dans une fenêtre à part
    "TEMP" & My.Computer.Name

  12. #12
    Membre émérite Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Points : 2 528
    Points
    2 528
    Par défaut
    Pour moi, logiquement oui. Chaque PC ne pourra travailler que sur SON dossier.

    Après, peut être que des développeurs plus expérimentés trouveraient à redire... je sais pas.
    L'avenir appartient à ceux... dont les ouvriers se lèvent tôt. (Coluche)

Discussions similaires

  1. Empecher un client de supprimer les dossiers Administrateur local
    Par alex_m94 dans le forum Windows Serveur
    Réponses: 5
    Dernier message: 15/11/2007, 16h11
  2. comment supprimer un dossier
    Par legrunge59570 dans le forum VB.NET
    Réponses: 8
    Dernier message: 13/08/2007, 12h41
  3. supprimer un dossier vide chez free
    Par lionjohn dans le forum Langage
    Réponses: 1
    Dernier message: 24/06/2007, 18h57
  4. Supprimer un dossier
    Par Doldz dans le forum Delphi
    Réponses: 4
    Dernier message: 01/06/2007, 10h38
  5. comment supprimer un dossier
    Par CIBOOX dans le forum Windows XP
    Réponses: 12
    Dernier message: 03/01/2007, 19h51

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