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 :

Créer un fichier sans l'écraser


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Profil pro
    Dév
    Inscrit en
    Juin 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Dév

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 165
    Par défaut Créer un fichier sans l'écraser
    Bonjour,

    J'aimerais savoir comment lorsque je créé un fichier, faire en sorte que celui-ci n'écrase pas le fichier portant le même nom. Comme lorsqu'on télécharge un fichier, ce fichier si le nom existe déjà à un "(1)" à la fin. Le nombre grandissant ainsi de suite.

    Merci.

  2. #2
    Membre confirmé
    Avatar de Psycadi
    Homme Profil pro
    Chef de projet - Expert en message box
    Inscrit en
    Juillet 2003
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet - Expert en message box

    Informations forums :
    Inscription : Juillet 2003
    Messages : 147
    Par défaut
    Avec System.IO, tu as plein d'outils sur les fichiers pour connaitre leur nom, le path.... dont la méthode GetFileNameWithoutExtension.


    Si tu listes tous les fichiers de ton répertoire, tu n'as plus qu'à chercher si ton fichier existe déjà et lui ajouté "(1)" si c'est le cas (ou 2,3,n....).

  3. #3
    Membre chevronné
    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
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.IO.File.Exists("C:\toto.txt")

  4. #4
    Membre Expert
    Profil pro
    Dév
    Inscrit en
    Juin 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Dév

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 165
    Par défaut
    Ben ça fait vachement de boucle niveau algo. Genre je liste tous les répertoires dans un tableau de string. Je dois après déterminer les fichiers avec le même nom ainsi que le nombre max pour lui affecter le bon nombre, ça fait un peu beaucoup, je pensais que ce genre d'outil existait déjà. Bon ben tant pis alors.

  5. #5
    Membre confirmé
    Avatar de Psycadi
    Homme Profil pro
    Chef de projet - Expert en message box
    Inscrit en
    Juillet 2003
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet - Expert en message box

    Informations forums :
    Inscription : Juillet 2003
    Messages : 147
    Par défaut
    Moi, je ferai un truc du genre
    - récupérer le nom du dossier
    - récupérer le nom du fichier (avec et sans extension)
    - boucle (while ?)
    - est-ce que mon fichier existe? (méthode de PatteDePoule)
    - non, je le crée et je sors de la boucle
    - oui, je modifie le nom (ajout de (n) derrière le nom) et je boucle

    En gros, c'est pas super long, je pense. Sauf si tu as 400 fois le même fichier.

  6. #6
    Membre chevronné
    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
    Par défaut
    Ce n'est vraiment pas long et compliqué comme code.

    Exemple rapide:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    string filename = "C:\\toto.txt"
     
    if (System.IO.File.Exists(filename))
    {
    	int delta = 1;
     
    	while (String.Format("{0}({1})", System.IO.File.Exists(filename), delta))
    		delta++;
     
    	filename = String.Format("{0}({1})", System.IO.File.Exists(filename), delta);
    }
    Ça rajoute seulement le (1) à la fin du nom du fichier, mais le principale est là

  7. #7
    Membre Expert
    Profil pro
    Dév
    Inscrit en
    Juin 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Dév

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 165
    Par défaut
    Donc pour l'instant j'ai ça comme code. Ça me crée des fichier de type "fichier(1)(1)(1).xml" mais c'est le seul moyen que j'ai trouvé simplement pour l'instant pour résoudre ce petit problème.

    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
    17
    18
    19
    20
    public static void SaveInFile(string fileName, string value)
            {
                if (System.IO.File.Exists(fileName))
                {
                    fileName = fileName.Replace(".xml", "(1).xml");
                    SaveInFile(fileName, value);
                }
                else
                {
                    System.IO.StreamWriter monStreamWriter = new System.IO.StreamWriter(fileName); ;
                    try
                    {
                        monStreamWriter.Write(value);
                    }
                    finally
                    {
                        monStreamWriter.Close();
                    }
                }
            }
    Edit : j'ai pas vu vos dernières réponses. Oui je risque d'avoir 4 ou 5 fois le même nom de fichier (d'où ce petit problème tout bête).

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 104
    Par défaut
    Bin je pense à un truc tout bète mais le code de PatteDePoule est plutôt bien et du coup sa te donnerai au final quelque chose comme cela :

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    private void meFonction()
            {
                string filename = "C:\\toto";
                string extension = ".txt";
                string NumeroFile = "";
     
                int delta = 1;
     
                if (File.Exists(filename + extension))
                {
                    NumeroFile = String.Format("({0})", delta);
                    while (File.Exists( filename + NumeroFile + extension))
                    {
                        delta++; 
                        NumeroFile = String.Format("({0})", delta);
                    }
                    Ecriture_dans_mon_fichier(filename + NumeroFile + extension);
                }
                else
                {
                    Ecriture_dans_mon_fichier( filename + extension);
                }
            }
     
            private void Ecriture_dans_mon_fichier(String file)
            {
                StreamWriter sw = new StreamWriter(file);
     
                /*
                 * tu écris ce que tu veux dedans
                 * 
                */
     
                sw.Flush();
                sw.Close();
            }
    bon c'est un peu fouilli mais ça a le mérite de fonctionner, ta plus qu'a le rendre un peu plus propre

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

Discussions similaires

  1. Ecriture dans un fichier sans l'écraser
    Par Xx_raaY dans le forum C#
    Réponses: 4
    Dernier message: 02/06/2009, 09h29
  2. écrire dans un fichier sans l'écraser
    Par radahm dans le forum Import/Export
    Réponses: 3
    Dernier message: 15/05/2009, 14h52
  3. Créer un fichier ELF sans même GNU/ld
    Par Hibou57 dans le forum Administration système
    Réponses: 9
    Dernier message: 13/01/2007, 18h59
  4. écrire au début d'un fichier sans l'écraser
    Par Davboc dans le forum Langage
    Réponses: 11
    Dernier message: 30/12/2005, 01h48
  5. Réponses: 6
    Dernier message: 23/12/2005, 18h24

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