将文本文件读入字符串变量的最快方法是什么?

我理解它可以通过几种方式完成,比如读取单个字节,然后将它们转换为字符串。我在寻找一种编码最少的方法。


当前回答

你可以这样用

public static string ReadFileAndFetchStringInSingleLine(string file)
    {
        StringBuilder sb;
        try
        {
            sb = new StringBuilder();
            using (FileStream fs = File.Open(file, FileMode.Open))
            {
                using (BufferedStream bs = new BufferedStream(fs))
                {
                    using (StreamReader sr = new StreamReader(bs))
                    {
                        string str;
                        while ((str = sr.ReadLine()) != null)
                        {
                            sb.Append(str);
                        }
                    }
                }
            }
            return sb.ToString();
        }
        catch (Exception ex)
        {
            return "";
        }
    }

希望这对你有所帮助。

其他回答

我强烈建议使用File. readlines(路径)相比StreamReader或任何其他文件读取方法。请在下面找到小文件和大文件的详细性能基准。 我希望这能有所帮助。

文件操作读取结果:

对于小文件(只有8行)

对于较大的文件(128465行)

readline的例子:

public void ReadFileUsingReadLines()
{
    var contents = File.ReadLines(path);
}

注意:基准测试是在。net 6中完成的。

你也可以从文本文件中读取文本到字符串,如下所示

string str = "";
StreamReader sr = new StreamReader(Application.StartupPath + "\\Sample.txt");
while(sr.Peek() != -1)
{
  str = str + sr.ReadLine();
}

File怎么样?ReadAllText:

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

你可以这样用

public static string ReadFileAndFetchStringInSingleLine(string file)
    {
        StringBuilder sb;
        try
        {
            sb = new StringBuilder();
            using (FileStream fs = File.Open(file, FileMode.Open))
            {
                using (BufferedStream bs = new BufferedStream(fs))
                {
                    using (StreamReader sr = new StreamReader(bs))
                    {
                        string str;
                        while ((str = sr.ReadLine()) != null)
                        {
                            sb.Append(str);
                        }
                    }
                }
            }
            return sb.ToString();
        }
        catch (Exception ex)
        {
            return "";
        }
    }

希望这对你有所帮助。

File的基准比较。c#文件处理中的ReadAllLines vs StreamReader ReadLine

结果。StreamReader对于10000 +的大文件要快得多 行,但对于较小的文件,差异可以忽略不计。像往常一样, 计划不同大小的文件,并使用File。仅当 性能并不重要。

StreamReader方法

作为文件。ReadAllText方法已经被其他人建议,您也可以尝试更快的方法(我没有定量测试性能影响,但它似乎比File更快。ReadAllText(参见下面的比较))。不过,只有在较大的文件中才能看到性能上的差异。

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

File.Readxxx()与StreamReader.Readxxx()的比较

通过ILSpy查看指示性代码,我发现了以下关于文件的内容。ReadAllLines File.ReadAllText。

文件。ReadAllText -使用StreamReader。ReadToEnd内部 文件。ReadAllLines -也使用StreamReader。内部ReadLine,额外的开销是创建List<string>作为读取行返回,并循环直到文件结束。

所以这两个方法都是建立在StreamReader之上的额外便利层。这从该方法的指示体中可以明显看出。

由ILSpy反编译的File.ReadAllText()实现

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;
}