Bonjour,
Je dois extraire des données d'un fichier de log.
J'utilise le code suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
FileStream fsRead = new FileStream(ConfigurationManager.AppSettings["inputLogFile"], FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
if (fsRead != null)
{
     using (StreamReader reader = new StreamReader(fsRead))
     {
          string line = "";
          while ((line = reader.ReadLine()) != null)
          {
               ...
               if (line.Contains("Le paramètre 'toto' est requis"))
               ...
          }
     }
}
Tel quel, ça ne fonctionne pas (je n'ai pas d'erreurs mais il n'arrive pas à reconnaître tous mes "line.Contains").
En ouvrant ce fichier de log dans Notepad++, le menu Encodage m'indique que c'est de l'ANSI.
Si je copie colle le contenu du fichier dans un nouveau fichier dont Notepad++ m'indique que l'encodage est UTF-8 et que c'est ce dernier que je passe dans mon programme, alors ça fonctionne bien.
Je cherche donc à modifier mon code pour que je n'ai pas cette étape manuelle à faire afin de pouvoir automatiser cette tâche.
Je cherche donc à transformer de l'ANSI en UTF-8 en appliquant le code suivant.
Il n'y a pas de Encoding.ANSI à proprement parler mais la définition de Encoding.Default est :
Gets an encoding for the operating system's current ANSI code page
.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
FileStream fsRead = new FileStream(ConfigurationManager.AppSettings["inputLogFile"], FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
if (fsRead != null)
{
     using (StreamReader reader = new StreamReader(fsRead, true))
     {
          string line = "";
          while ((line = Encoding.UTF8.GetString(Encoding.Default.GetBytes(reader.ReadLine()))) != null)
          {
               ...
               if (line.Contains("Le paramètre 'toto' est requis"))
               ...
          }
     }
}
Mais cela ne fonctionne toujours pas, j'ai l'erreur suivante cette fois-ci au niveau de mon while
System.ArgumentNullException : {"La référence de chaîne n'est pas définie à une instance d'une chaîne.\r\nNom du paramètre*: s"}
Je suis donc bloqué car je ne vois pas ce que je peux faire de plus pour lire correctement ce fichier ANSI.
Merci pour votre aide.