首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >File.ReadAllLines或流读取器

File.ReadAllLines或流读取器
EN

Stack Overflow用户
提问于 2014-06-02 15:50:23
回答 3查看 53.4K关注 0票数 16

我们可以使用StreamReaderFile.ReadAllLines读取文件。

例如,我希望将每一行加载到Liststring[]中,以便对每一行进行进一步操作。

代码语言:javascript
复制
string[] lines = File.ReadAllLines(@"C:\\file.txt");

foreach(string line in lines)
{
     //DoSomething(line);
}

代码语言:javascript
复制
using (StreamReader reader = new StreamReader("file.txt"))
{
    string line;

    while ((line = reader.ReadLine()) != null)
    {
       //DoSomething(line); or //save line into List<string>
    }
}

//if list is created loop through list here 

应用程序遇到不同大小的文本文件。它可以偶尔从很少的KBs发展到MBs

我的问题是,哪种方式是首选的,为什么一种方式应该比另一种方式更好?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-06-02 16:05:34

如果您希望在不将整个文件加载到内存的情况下处理文本文件的每一行,最好的方法如下:

代码语言:javascript
复制
foreach (var line in File.ReadLines("Filename"))
{
    // ...process line.
}

这避免了加载整个文件,并使用现有的.Net函数来完成此操作。

但是,如果出于某种原因需要将所有字符串存储在一个数组中,最好使用File.ReadAllLines() -但如果只使用foreach访问数组中的数据,则使用File.ReadLines()

票数 27
EN

Stack Overflow用户

发布于 2014-06-02 16:03:33

Microsoft在File.ReadAllLines中使用StreamReader:

代码语言:javascript
复制
    private static String[] InternalReadAllLines(String path, Encoding encoding)
    {
        Contract.Requires(path != null);
        Contract.Requires(encoding != null);
        Contract.Requires(path.Length != 0);

        String line;
        List<String> lines = new List<String>();

        using (StreamReader sr = new StreamReader(path, encoding))
            while ((line = sr.ReadLine()) != null)
                lines.Add(line);

        return lines.ToArray();
    }
票数 22
EN

Stack Overflow用户

发布于 2014-06-02 16:26:02

StreamReader逐行读取文件,它将消耗较少的内存。然而,File.ReadAllLines一次读取所有行的并将其存储到中,会消耗更多的内存。如果string[]大于int.maxvalue,那么将产生32位操作系统的内存overflow(limit )。

因此,对于更大的文件,StreamReader会更有效率。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23989677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档