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 :

[C#]Lecture de fichiers


Sujet :

C#

  1. #1
    Membre averti
    Inscrit en
    Février 2007
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 16
    Par défaut [C#]Lecture de fichiers
    bonjour,
    je dois faire un programme en C# ou l'une des fonctions et de lire dans un fichier.
    ce fichier comporte une liste d'users et de pass sous la forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    user:pass:gid
    user2:pass2:gid2
    le probleme est que lorsque je passe au deuxieme user il me compte le '\n' avant
    ce qui fait : \nuser2

    voici le code :

    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
    37
    38
    39
    40
    41
    42
    43
    		private bool CheckUserPass(string login, string pass,Socket s)
    		{
    			BinaryReader input = null;
    			BinaryWriter output = null;
    			try
    			{
    				String chaine;
    				input=new BinaryReader(new FileStream("users.dat",FileMode.Open,FileAccess.Read));
    				while(((chaine = input.ReadString()) != null))
    				{	
    					String[] chaines = chaine.Split(':');
    					Console.WriteLine("1:"+chaines[0]+" 2:"+chaines[1]+" 3:"+chaines[2]);
    					if((login==chaines[0]) && (pass==chaines[1]))
    							return true;
    				}
    			}
    			catch(FileNotFoundException e)
    			{
    				//Console.Error.WriteLine(e);
    				try
    				{
    					output= new BinaryWriter(new FileStream("users.dat",FileMode.CreateNew,FileAccess.Write));
    					SendMessage("Login Administrateur : ");
    					String loginAdmin = System.Text.Encoding.UTF8.GetString(System.Text.Encoding.UTF8.GetBytes(ReadString(s)));
    					SendMessage("Password Administrateur : ");
    					String passAdmin = System.Text.Encoding.UTF8.GetString(System.Text.Encoding.UTF8.GetBytes(ReadString(s)));
    					output.Write(loginAdmin + ":" + passAdmin + ":0");
    					output.Close();
    					SendMessage("User Added !\n");
    				}
    				catch(Exception)
    				{
    					Console.Error.WriteLine("Impossible de créer le fichier users");
    				}
     
    			}
    			catch(Exception e)
    			{
    				Console.Write(e);
    			}
    			return false;
     
    		}
    le premier affichage ce fait nikel :

    et apres j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    1:
    root 2:pass 3:1
    j'ai un autre probleme : a la fin du fichier j'ai une exception EndOfStreamException.
    c'est donc que je suis à la fin du fichier, je dois le gerer via un try catch ou il est possible de ne pas générer cette exception en utilisant une autre méthode que ReadString() ?


    Merci.

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    481
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 481
    Par défaut
    bonjour,
    essaie :
    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
    public static ArrayList lectureFichier(string fichierpath) 
    		{ 
    			ArrayList Fichier = new ArrayList();
    			try 
    			{ 
    				StreamReader monStreamReader = new StreamReader(fichierpath); 
    				string ligne = monStreamReader.ReadLine(); 
     
    				while (ligne != null) 
    				{ 
    					string [] tab = ligne.Split(':');
    					for(int i = 0 ; i < tab.Length ; i++)
    					{
    						Fichier.Add(tab[i]);
    					}
    					//					Response.Write(ligne); 
    					//					Response.Write("</br>"); 
    					ligne = monStreamReader.ReadLine(); 
    				} 
     
    				monStreamReader.Close(); 
    			} 
    			catch 
    			{
    				Fichier.Add("Erreur");
    			} 
    			return(Fichier);
    pour récupérer le fichier puis:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for (int i =0 ; i < MonArray.Length ; i+=3)
    Console.WriteLine("1:"+MonArray[i]+" 2:"+MonArray[i+1]+" 3:"+MonArray[i+2]);
    En esperant résoudre ton problème.
    Bonne journée
    Notalp

  3. #3
    Membre averti
    Inscrit en
    Février 2007
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 16
    Par défaut
    merci pour ton aide ça a l'air de fonctionner.
    mais il y a un probleme avec :

    MonArray.Length

    la méthode n'existe pas...

  4. #4
    Membre expérimenté Avatar de scifire
    Inscrit en
    Juillet 2004
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 226
    Par défaut
    Un ArrayList n'a pas la propriete Length mais Count. Je vais faire un petit commentaire sur le post de notalp dans le post qui suit
    Je sais pas pourquoi tu utilises un fichier binaire .
    Je te propose une methode qui est beaucoup plus elegante.
    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
    public static bool CheckUserPass(string username, string password)
    {
        string fName = @"C:\users.txt";
        bool found = false;
     
        if (File.Exists(fName))
        {
            string line = string.Empty;
            string[] userInfo = null;
            using (StreamReader sr = new StreamReader(fName))
            {
                while (!found && (line = sr.ReadLine()) != null)
                {
                    userInfo = line.Split(':');
     
                    // Les trois champs sont obligatoires
                    System.Diagnostics.Debug.Assert(userInfo.Length == 3);
     
                    found = (userInfo[0] == username && userInfo[1] == password);
                }
            }
        }
        else
        {
            // Le fichier n'exist pas.
            // Traitement ...
        }
     
     
        return found;
    }
    Une autre chose.
    Pourquoi tu comptes sur une exception FileNotFoundException pour traiter le fait que le fichier n'existe pas C'est beaucoup plus facile de faire un petit test File.Exists(...).
    Encore une chose.
    Tu ne fermes jamais tes deux flux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    BinaryReader input = null;
    BinaryWriter output = null;
    Je te conseille d'utiliser toujours un si tu traites l'exception et un si tu la traites pas.

    J'espere que ces petits conseils vont t'aider
    A+

  5. #5
    Membre expérimenté Avatar de scifire
    Inscrit en
    Juillet 2004
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 226
    Par défaut
    notalp pourquoi tu utilises un ArrayList c'est beaucoup mieux d'utiliser un List<string> (en C# 2.0 bien sur).
    Si une exception se leve tu vas pas fermer ton flux (monStreamReader) - finally
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    catch 
    {
    	Fichier.Add("Erreur");
    }
    C'est pas la maniere de traiter l'exception
    Comme ca tu dis qu'il y a un utilisateur dont le pseudo est "Erreur" mais il n'a ni un mot de passe ni une connexion. Une exception sera levee au moment ou tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Console.WriteLine("1:"+MonArray[i]+" 2:"+MonArray[i+1]+" 3:"+MonArray[i+2]);


    No hard feelings

  6. #6
    Membre chevronné

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    481
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 481
    Par défaut
    Bonjour scifire,
    Tu m'as l'air très calé en c#, tu devrais proposé des réponses plus souvent

    Pour info :
    scifire je suis en 1.1 sans VS.
    En plus pour le moment je suis sous blocnot, j'ai fait ce code pour aider jmathon rapidement pour qu'il soit débloqué. Je n'ai pas encore pu réinstaller mon poste de développement donc je ne sais meme pas si mon code compile. mais je supposais que .Lenght ou .count ne poserai pas trop de problème...
    Je n'ai pas dit que mon code était le plus propre du monde mais j'ai eu au moins le mérite de lui répondre.

    Si tu as une meilleure solution je t"en prie donne la lui

    Bien respectueusement
    Notalp

    PS: quel est l'interret de tester l'existance du fichier si tu renseigne son nom e n dure??? pourquoi tu ne le passe pas par paramètre ?
    PPS: pour le finally tu as raison. Mais le forum est principalement la pour aiguiller les gens. Ils peuvent aussi vérifier le code et l'améliorrer ...

  7. #7
    Membre expérimenté Avatar de scifire
    Inscrit en
    Juillet 2004
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 226
    Par défaut
    Premierement merci
    Citation Envoyé par notalp
    PS: quel est l'interret de tester l'existance du fichier si tu renseigne son nom e n dure??? pourquoi tu ne le passe pas par paramètre ?
    Meme si le nom de fichier est code en dur ca ne veut pas dire qu'il exite
    Mais je suis tout a fait d'accourd avec toi moi aussi j'utiliserai un parametre dont la valeur est chargee a partir d'un fichier de configuration (XML c'est a la mode ) Honnetement je l'ai mis en dur pour rester proche du
    "users.dat"
    de jmathon
    A+

  8. #8
    Membre averti
    Inscrit en
    Février 2007
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 16
    Par défaut
    j'ai utilisé la solution de notalp
    Etant debutant en C# je la trouve plus "simple" :p

    Merci bien !

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

Discussions similaires

  1. [Windows]lecture des fichier lnk (raccourcis)
    Par Tiaps dans le forum API standards et tierces
    Réponses: 10
    Dernier message: 21/10/2009, 19h27
  2. [jsp]lecture de fichier
    Par antigone dans le forum Servlets/JSP
    Réponses: 9
    Dernier message: 04/09/2003, 11h05
  3. [AS400][Intranet][PC] Lecture de "fichiers" AS400
    Par lando dans le forum Autres SGBD
    Réponses: 4
    Dernier message: 16/07/2003, 11h11
  4. Lecture de fichier
    Par Watcha dans le forum x86 16-bits
    Réponses: 13
    Dernier message: 04/03/2003, 20h43
  5. Lecture de fichiers ".WAV"...
    Par 0x4e84 dans le forum Langage
    Réponses: 2
    Dernier message: 03/09/2002, 09h43

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