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

C# Discussion :

Problème à la création d'un fichier


Sujet :

C#

  1. #1
    Membre à l'essai
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 7
    Points : 11
    Points
    11
    Par défaut Problème à la création d'un fichier
    Bonjour,

    il y a quelque chose qui m'échappe lors que je crée un fichier texte.

    D'abord je vérifie qu'il n'existe pas et s'il existe je l'efface. Ensuite je le créé.

    Une fois le fichier créé (utilisation de la méthode create() ) je n'ai plus l'accès à ce fichier pour le modifier ou pour le supprimer jusqu'à ce que je ferme le programme.

    J'ai associer le code qui suit au clic d'un bouton pour tester le création et la suppression du fichier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if (System.IO.File.Exists(filePath))
       System.IO.File.Delete(filePath);
     
    FileInfo fichier = new FileInfo(filePath); 
       fichier.Create();
    filePath étant la variable contenant le chemin vers mon fichier.

    Logiquement à chaque fois que je clic sur le bouton de test ça supprimer et recrée un fichier. Or c'est pas ce qui se passe.

    Au premier clic tout fonctionne normalement. Si un fichier existait, il est bien effacé et un nouveau fichier est créé.
    Au deuxième clic j'ai un message me signalant que le fichier est utilisé par un autre processus.
    Informations supplémentaires*: Le processus ne peut pas accéder au fichier '...', car il est en cours d'utilisation par un autre processus.
    J'ai suivis en debug et c'est au deuxième clic à l'utilisation de la méthode delete() que ça bloque.

    Ai-je loupé quelque chose? Faut-il "libérer" le fichier après sa création?

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2008
    Messages
    381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2008
    Messages : 381
    Points : 766
    Points
    766
    Par défaut
    Si on regarde l'exemple sur MSDN il faut faire un p'tit Close() après.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    // Create a reference to a file.
    FileInfo fi = new FileInfo("temp.txt");
    // Actually create the file.
    FileStream fs = fi.Create();
    // Modify the file as required, and then close the file.
    fs.Close();

  3. #3
    Membre éprouvé Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Points : 1 188
    Points
    1 188
    Par défaut
    Bonjour,

    Le close n'est pas nécessaire, je pense qu'il faut que tu utilises la fonction adaptée à ton cas.

    La fonction Create te renvoie un stream, qui est Disposable (cad : contient des ressources non-managées qui ne seront pas collectées par le Garbage Collector) d'où ton erreur d'accès à un fichier que tu verrouillais toi-même.

    Si tu souhaites utiliser le stream, il faut faire quelque chose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    using ( stream unFlux = fichier.Create())
    {
        // Code d'utilisation du flux...
    }
    Si tu as le texte à écrire dans ton fichier, il vaut mieux utiliser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    File.WriteAllText(nomfichier, contenu);
    Pas de ressources non managées, pas besoin d'ouvrir un flux et donc de le fermer.

    Bon dév.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 7
    Points : 11
    Points
    11
    Par défaut
    Merci de vos éclaircissements.

    En effet à la lumière de ce que vous m'expliquez cela semble logique (j'avais pas lu la doc de create() mea culpa )

    En fait c# n'est pas mon language principal et j'avais pris comme base pour la manipulmation de fichier le tuto de Ronald VASSEUR qu'on trouve dans la partie tuto.
    Très pratique mais aucune mention concernant les précautions à l'utilisation de la méthode create() (section 4.2).

    Je n'ai pas encore eu le temps tester le code corrigé mais dès que ce sera la cas, je ne manquerai de mettre le topix résolu.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 7
    Points : 11
    Points
    11
    Par défaut
    Voilà j'ai testé et c'était bien ça.

    La fonction Create() renvois un stream qu'il faut fermer même si on ne l'a pas utilisé.

    dans mon cas ça donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if (System.IO.File.Exists(filePath))
       System.IO.File.Delete(filePath);
     
    FileInfo fichier = new FileInfo(filePath); 
    FileStream stream = fichier.Create();
    stream.Close();
    Merci de votre aide

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

Discussions similaires

  1. [Débutant] Problème de création d'un fichier Excel à partir de VB.Net
    Par Aiman.elmachi dans le forum VB.NET
    Réponses: 4
    Dernier message: 18/06/2014, 13h36
  2. Problème de création d'un fichier BMP
    Par Gandalf2008 dans le forum C
    Réponses: 4
    Dernier message: 12/05/2010, 15h15
  3. Problème à la création d'un fichier d'aide
    Par kurul1 dans le forum C++Builder
    Réponses: 1
    Dernier message: 15/02/2007, 15h49
  4. Réponses: 1
    Dernier message: 20/10/2005, 10h32
  5. [Delphi 2005] Débutant avec problème de création de fichier
    Par Patcdc dans le forum Bases de données
    Réponses: 2
    Dernier message: 06/06/2005, 18h41

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