How to read an entire file to a string using C#?
string contents = System.IO.File.ReadAllText(path)
Here's the MSDN documentation
How about File.ReadAllText
:
string contents = File.ReadAllText(@"C:\temp\test.txt");
A benchmark comparison of File.ReadAllLines
vs StreamReader ReadLine
from C# file handling
Results. StreamReader is much faster for large files with 10,000+ lines, but the difference for smaller files is negligible. As always, plan for varying sizes of files, and use File.ReadAllLines only when performance isn't critical.
StreamReader approach
As the File.ReadAllText
approach has been suggested by others, you can also try the quicker (I have not tested quantitatively the performance impact, but it appears to be faster than File.ReadAllText
(see comparison below)). The difference in performance will be visible only in case of larger files though.
string readContents;
using (StreamReader streamReader = new StreamReader(path, Encoding.UTF8))
{
readContents = streamReader.ReadToEnd();
}
Comparison of File.Readxxx() vs StreamReader.Readxxx()
Viewing the indicative code through ILSpy I have found the following about File.ReadAllLines
, File.ReadAllText
.
File.ReadAllText
- UsesStreamReader.ReadToEnd
internallyFile.ReadAllLines
- Also usesStreamReader.ReadLine
internally with the additionally overhead of creating theList<string>
to return as the read lines and looping till the end of file.
So both the methods are an additional layer of convenience built on top of StreamReader
. This is evident by the indicative body of the method.
File.ReadAllText()
implementation as decompiled by 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;
}