spectresombre
Messages postés22Date d'inscriptionmardi 28 janvier 2003StatutMembreDernière intervention26 août 2003
-
14 août 2003 à 21:32
cs_yoannd
Messages postés305Date d'inscriptionlundi 7 janvier 2002StatutMembreDernière intervention10 août 2011
-
3 oct. 2007 à 11:12
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
cs_yoannd
Messages postés305Date d'inscriptionlundi 7 janvier 2002StatutMembreDernière intervention10 août 20117 2 oct. 2007 à 15:44
Pardon, rectification de mon précédent post, mais cette fois avec la fermeture du fichier (c'est mieux) :
FileStream fs = null;
try{
fs = new FileStream("NomDuFichier", FileMode.Open);
StreamReader reader = new StreamReader(fs);
string contenuFichier = reader.ReadToEnd();
}catch(FileNotFoundException fnfEx){
// A faire si le fichier n'existe pas
}catch(Exception ex){
// A faire pour le reste des exceptions
}finally{
if(fs != null) fs.Close();
}
cs_yoannd
Messages postés305Date d'inscriptionlundi 7 janvier 2002StatutMembreDernière intervention10 août 20117 2 oct. 2007 à 15:31
Si je puis me permettre, pour la lecture d'un fichier, il faut mieux utiliser des try catch, non ? Vérifier qu'un fichier existe [if (fi.Exists)], c'est bien, mais cela ne garantit pas que le fichier est accessible en lecture par windows : un vérou peut être posé sur le fichier car un autre process accède au fichier en écriture.
Voila ma solution :
FileStream fs = null;
try{
fs = new FileStream("NomDuFichier", FileMode.Open);
StreamReader reader = new StreamReader(fs);
string contenuFichier = reader.ReadToEnd();
}catch(FileNotFoundException fnfEx){
// A faire si le fichier n'existe pas
}catch(Exception ex){
// A faire pour le reste des exceptions
}
bon, je ne sait pas si c'est moi mais ASCIIEncoding.Default je suis obliger de le supprimer parceque sinon rien ne marche...
Ensuite j'ai eu pas mal de problemes avec les FileStream, donc je les ait supprimer et pour les streamreader, j'ai mis :
StreamReader sr = new StreamReader(fichier_ini);
où fichier_ini est une string qui contient le nom du fichier a ouvrir
et pour les streamwriter j'ai mis :
StreamWriter Sw = new StreamWriter(fichier_ini, false);
J'arrive a formatter mon fichier comme je veut mais je voudrait savoir si ce n'est pas dangeureux de ne pas utiliser les ASCIIEncoding.Default et les Filestream parceque l'appli que je developpe doit gerer des comptes de clients et il me faut du code robuste...
Merci de me repondre
PS : Grace a vous, j'ai gagner du temps de lecture dans mes 12 pavé sur le C#
dadavidou2005
Messages postés2Date d'inscriptionmercredi 7 juillet 2004StatutMembreDernière intervention 4 août 2004 4 août 2004 à 17:34
J'ai juste oublié de faire une petite correction.
Dans la fonction EcrireFile :
il faut écrire :
public int EcrireFile(string fichier, string variable, string valeur)
au lieu de :
public void EcrireFile(string fichier, string variable, string valeur)
Mille excuses.
dadavidou2005
Messages postés2Date d'inscriptionmercredi 7 juillet 2004StatutMembreDernière intervention 4 août 2004 4 août 2004 à 17:24
Voici le code corrigé. (avec la fermeture des descripteurs). :) a+
using System.IO;
using System.Text;
/* LECTURE D'UNE VARIABLE */
public string LireFile(string fichier, string variable)
{
string valeur = "";
FileInfo fi = new FileInfo(fichier);
/* on verifie si le fichier existe puis on ouvre l'acces au fichier */
if (fi.Exists)
{
string s; string[] text;
FileStream fs = new FileStream(fichier, FileMode.Open);
StreamReader sr = new StreamReader(fs);
/* On crée une boucle qui compare les variables lignes par lignes */
/* jusqu'a trouver la variable demandée */
do
{
s = sr.ReadLine();
if ((s !null) && (s.StartsWith(variable) true))
{
text = s.Split(new char[]{':'});
valeur = text[1].Trim();
}
} while (s != null);
fs.Close ();
sr.Close ();
}
/* On retourne la valeur de la variable (retourne chaine vide si pas trouvé) */
return valeur;
}
/* AJOUTER UNE VARIABLE ET SA VALEUR */
public void EcrireFile(string fichier, string variable, string valeur)
{
int flag;
FileInfo fi = new FileInfo(fichier);
/* On recupère le texte complet du fichier */
if (fi.Exists) // on verifie ke le fichier existe
{
flag = 1;
StreamWriter sw = new StreamWriter(fichier, true, ASCIIEncoding.Default);
sw.Write(variable + " : " + valeur + "\r\n");
sw.Close();
}
else
{
flag = 0;
}
/* On retourne la valeur du drapeau (retourne 0 si pas trouvé) */
return flag;
}
/* MODIFICATION DE LA VALEUR D'UNE VARIABLE */
public void ModifFile(string fichier, string variable, string valeur)
{
FileInfo fi = new FileInfo(fichier);
if (fi.Exists) // si le fichier existe
{
/* On met la totalité du fichier dans un variable */
StreamReader sr = new StreamReader(fichier, ASCIIEncoding.Default);
string s = sr.ReadToEnd();
sr.Close();
/* On trouve ou est placé la variable dans le fichier */
int i = s.IndexOf(variable);
/* On trouve la fin de la ligne de cette variable */
int n = s.IndexOf("\r\n", i);
/* On récupère la chaine dans la variable p */
string p = s.Substring(i, n - i);
/* Enfon on remplace p par la variable + valeur donnée */
s = s.Replace(p, variable + " : " + valeur);
StreamWriter sw = new StreamWriter(fichier, false, ASCIIEncoding.Default);
sw.Write(s);
sw.Close();
}
}
Testé et approuvée !
Jujufouq
Messages postés254Date d'inscriptionjeudi 27 décembre 2001StatutMembreDernière intervention 5 mars 2006 23 avril 2004 à 17:43
Je cherche à modifier une séquence d'octets dans un fichier de plusieurs GigaOctets par une autre séquence d'octets de même taille que la première. Il est bien évident que je ne vais pas faire passer le fichier dans une variable... alors comment faire???
cs_Bki
Messages postés32Date d'inscriptionvendredi 18 janvier 2002StatutMembreDernière intervention25 mai 2004 18 sept. 2003 à 11:18
Pour LireFile(fichier, variable), et peut-être pour d'autres, j'ai pas vérifié, je ne vois pas de sr.Close(). Il faut toujours les fermer.
Je pense que ton code pour modifier une variable plante s'il n'y a qu'une seule variable dans le fichier. Il ne trouvera pas le "
" et ça retournera -1, tu feras donc un substring avec un indice négatif. A vérifier quand même... Ca vient du fait que quand tu lis une ligne de fichier, ça enlève les marques de fin de ligne.
spectresombre
Messages postés22Date d'inscriptionmardi 28 janvier 2003StatutMembreDernière intervention26 août 2003 18 août 2003 à 11:28
Et pour Tommz : J'accepte volontiers les critiques sauf celles de personne qui ne mettent pas de sources :)
spectresombre
Messages postés22Date d'inscriptionmardi 28 janvier 2003StatutMembreDernière intervention26 août 2003 18 août 2003 à 09:43
Pour la présentation j'avoue ke la mise en page n'est pas extra (un vendredi soir avant de quitter le taf j'étais pressé lol)
Par contre "super fermé"..... C'est pas censé faire le café ce script.
cs_tommz
Messages postés11Date d'inscriptionlundi 4 août 2003StatutMembreDernière intervention 3 mars 2004 17 août 2003 à 18:57
comme gg00xiv...
c'est mal codé en plus et c'est super fermé comme code..
gg00xiv
Messages postés656Date d'inscriptionmercredi 22 août 2001StatutMembreDernière intervention11 mars 200513 16 août 2003 à 15:12
illisible, surtout si ca sadresse au debutants ...
spectresombre
Messages postés22Date d'inscriptionmardi 28 janvier 2003StatutMembreDernière intervention26 août 2003 14 août 2003 à 21:32
J'ai oublie de préciser de rajouter un using System.IO et un using System.Text :)
3 oct. 2007 à 11:12
http://csharpfr.com/tutoriaux/GESTION-EXCEPTION-LECTURE-FICHIER-DIRECTIVE-PRECOMPILATION_749.aspx
Bonne lecture !
2 oct. 2007 à 15:44
FileStream fs = null;
try{
fs = new FileStream("NomDuFichier", FileMode.Open);
StreamReader reader = new StreamReader(fs);
string contenuFichier = reader.ReadToEnd();
}catch(FileNotFoundException fnfEx){
// A faire si le fichier n'existe pas
}catch(Exception ex){
// A faire pour le reste des exceptions
}finally{
if(fs != null) fs.Close();
}
2 oct. 2007 à 15:31
Voila ma solution :
FileStream fs = null;
try{
fs = new FileStream("NomDuFichier", FileMode.Open);
StreamReader reader = new StreamReader(fs);
string contenuFichier = reader.ReadToEnd();
}catch(FileNotFoundException fnfEx){
// A faire si le fichier n'existe pas
}catch(Exception ex){
// A faire pour le reste des exceptions
}
19 févr. 2005 à 16:29
Ensuite j'ai eu pas mal de problemes avec les FileStream, donc je les ait supprimer et pour les streamreader, j'ai mis :
StreamReader sr = new StreamReader(fichier_ini);
où fichier_ini est une string qui contient le nom du fichier a ouvrir
et pour les streamwriter j'ai mis :
StreamWriter Sw = new StreamWriter(fichier_ini, false);
J'arrive a formatter mon fichier comme je veut mais je voudrait savoir si ce n'est pas dangeureux de ne pas utiliser les ASCIIEncoding.Default et les Filestream parceque l'appli que je developpe doit gerer des comptes de clients et il me faut du code robuste...
Merci de me repondre
PS : Grace a vous, j'ai gagner du temps de lecture dans mes 12 pavé sur le C#
4 août 2004 à 17:34
Dans la fonction EcrireFile :
il faut écrire :
public int EcrireFile(string fichier, string variable, string valeur)
au lieu de :
public void EcrireFile(string fichier, string variable, string valeur)
Mille excuses.
4 août 2004 à 17:24
using System.IO;
using System.Text;
/* LECTURE D'UNE VARIABLE */
public string LireFile(string fichier, string variable)
{
string valeur = "";
FileInfo fi = new FileInfo(fichier);
/* on verifie si le fichier existe puis on ouvre l'acces au fichier */
if (fi.Exists)
{
string s; string[] text;
FileStream fs = new FileStream(fichier, FileMode.Open);
StreamReader sr = new StreamReader(fs);
/* On crée une boucle qui compare les variables lignes par lignes */
/* jusqu'a trouver la variable demandée */
do
{
s = sr.ReadLine();
if ((s !null) && (s.StartsWith(variable) true))
{
text = s.Split(new char[]{':'});
valeur = text[1].Trim();
}
} while (s != null);
fs.Close ();
sr.Close ();
}
/* On retourne la valeur de la variable (retourne chaine vide si pas trouvé) */
return valeur;
}
/* AJOUTER UNE VARIABLE ET SA VALEUR */
public void EcrireFile(string fichier, string variable, string valeur)
{
int flag;
FileInfo fi = new FileInfo(fichier);
/* On recupère le texte complet du fichier */
if (fi.Exists) // on verifie ke le fichier existe
{
flag = 1;
StreamWriter sw = new StreamWriter(fichier, true, ASCIIEncoding.Default);
sw.Write(variable + " : " + valeur + "\r\n");
sw.Close();
}
else
{
flag = 0;
}
/* On retourne la valeur du drapeau (retourne 0 si pas trouvé) */
return flag;
}
/* MODIFICATION DE LA VALEUR D'UNE VARIABLE */
public void ModifFile(string fichier, string variable, string valeur)
{
FileInfo fi = new FileInfo(fichier);
if (fi.Exists) // si le fichier existe
{
/* On met la totalité du fichier dans un variable */
StreamReader sr = new StreamReader(fichier, ASCIIEncoding.Default);
string s = sr.ReadToEnd();
sr.Close();
/* On trouve ou est placé la variable dans le fichier */
int i = s.IndexOf(variable);
/* On trouve la fin de la ligne de cette variable */
int n = s.IndexOf("\r\n", i);
/* On récupère la chaine dans la variable p */
string p = s.Substring(i, n - i);
/* Enfon on remplace p par la variable + valeur donnée */
s = s.Replace(p, variable + " : " + valeur);
StreamWriter sw = new StreamWriter(fichier, false, ASCIIEncoding.Default);
sw.Write(s);
sw.Close();
}
}
Testé et approuvée !
23 avril 2004 à 17:43
18 sept. 2003 à 11:18
Je pense que ton code pour modifier une variable plante s'il n'y a qu'une seule variable dans le fichier. Il ne trouvera pas le "
" et ça retournera -1, tu feras donc un substring avec un indice négatif. A vérifier quand même... Ca vient du fait que quand tu lis une ligne de fichier, ça enlève les marques de fin de ligne.
18 août 2003 à 11:28
18 août 2003 à 09:43
Par contre "super fermé"..... C'est pas censé faire le café ce script.
17 août 2003 à 18:57
c'est mal codé en plus et c'est super fermé comme code..
16 août 2003 à 15:12
14 août 2003 à 21:32