232 votes

Comment Lire un fichier Entier en une Chaîne à l'aide de C#

Quel est le moyen le plus rapide pour lire un fichier texte dans une variable de chaîne?

Je comprends qu'il peut être fait de plusieurs façons, comme lire des octets individuels et ensuite la convertir en chaîne. Je cherchais une méthode avec un minimum de codage.

Je suis à l'aide .NET version 3.5.

404voto

marc_s Points 321990

Que diriez -

string contents = File.ReadAllText(@"C:\temp\test.txt");

175voto

Devendra D. Chavan Points 4707

Une comparaison des performances de l' File.ReadAllLines vs StreamReader ReadLine de C# à la manipulation de fichiers

File Read Comparison

Résultats. StreamReader est beaucoup plus rapide pour les gros fichiers avec+de 10 000 lignes, mais la différence pour les petits fichiers est négligeable. Comme toujours, plan pour les différentes tailles de fichiers, et utiliser le Fichier.ReadAllLines uniquement lorsque la performance n'est pas critique.


StreamReader approche

Comme l' File.ReadAllText approche a été suggéré par d'autres, vous pouvez aussi essayer le plus rapide (je n'ai pas testé quantitativement l'impact sur les performances, mais il semble être plus rapide que l' File.ReadAllText (voir la comparaison ci-dessous)). La différence de performances seront visibles uniquement en cas de plus gros fichiers.

string readContents;
using (StreamReader streamReader = new StreamReader(path, Encoding.UTF8))
{
     readContents = streamReader.ReadToEnd();
}


Comparaison de Fichier.Readxxx() vs StreamReader.Readxxx()

Affichage de l'indicatif du code par le biais de ILSpy j'ai trouvé ce qui suit à propos de File.ReadAllLines, File.ReadAllText.

  • File.ReadAllText - Utilise StreamReader.ReadToEnd en interne
  • File.ReadAllLines - Utilise également StreamReader.ReadLine en interne, avec en outre la surcharge de la création de l' List<string> de rendement que la lecture des lignes et la mise en boucle jusqu'à la fin du fichier.


Donc, les deux méthodes sont d'une couche supplémentaire de confort construit au sommet d' StreamReader. Cela est évident par l'indicatif corps de la méthode.

File.ReadAllText() la mise en œuvre de décompilation par ILSpy

public static string ReadAllText(string path)
{
    if (path == null)
    {
        throw new ArgumentNullException("path");
    }
    if (path.Length == 0)
    {
        throw new ArgumentException(Environment.GetResourceString("Argument_EmptyPath"));
    }
    return File.InternalReadAllText(path, Encoding.UTF8);
}   

private static string InternalReadAllText(string path, Encoding encoding)
{
    string result;
    using (StreamReader streamReader = new StreamReader(path, encoding))
    {
        result = streamReader.ReadToEnd();
    }
    return result;
}

16voto

Neil Barnwell Points 20731
string contents = System.IO.File.ReadAllText(path)

Voici la documentation MSDN

7voto

sll Points 30638

Jetez un oeil au Fichier.ReadAllText() la méthode

Quelques remarques importantes:

Cette méthode ouvre un fichier, lit chaque ligne du fichier, puis ajoute chaque ligne comme un élément d'une chaîne. Il ferme le fichier. Une ligne est défini comme une séquence de caractères suivie d'un retour chariot ('\r'), un saut de ligne ('\n'), ou un retour chariot suivi immédiatement par un saut de ligne. La chaîne résultante ne contient pas de fin retour chariot et/ou un saut de ligne.

Cette méthode tente de détecter automatiquement l'encodage d'un fichier basé sur la présence de marques d'ordre d'octet. Les formats d'encodage UTF-8 et UTF-32 (big-endian et little-endian) peuvent être détectés.

Utiliser le ReadAllText(String, Encodage) surcharge de la méthode lors de la lecture les fichiers qui peuvent contenir du texte importé, parce que non reconnus les caractères peuvent ne pas être lues correctement.

Le descripteur de fichier est garanti d'être fermé par cette méthode, même si les exceptions sont soulevées

5voto

Maxim V. Pavlov Points 4028
System.IO.StreamReader myFile =
   new System.IO.StreamReader("c:\\test.txt");
string myString = myFile.ReadToEnd();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X