2014-12-07 157 views
15

那么我现在不能做的是,MyFile.txt的有不是“英语”,“法国”,或在第一线 “德国”,我想从语言文本文件的第一行,然后继续我的代码从文本文件只读第一行

String[] languages = new String[] { "english", "french", "german"}; 

foreach (String language in languages) 
{ 
    string line1 = File.ReadLines("MyFile.txt").Skip(0).Take(1); 
    line1 = language; 
    continue; 
} 
+0

检查此帖:http://stackoverflow.com/questions/9439733/read-only-the-first-few-lines-of-text-from-a-file – abdo 2014-12-07 18:02:49

回答

29

你应该利用File.ReadLines连同Enumerable.First。 此注册就你只读取文件的第一行。

using System.Linq; 

...

string line1 = File.ReadLines("MyFile.txt").First(); // gets the first line from file. 

的差File.ReadAllLines是,File.ReadLines利用惰性计算的和犯规第一读取沃勒文件分成行的阵列。

+0

'System.IO.File'没有包含“ReadLines”的定义 – user3542613 2014-12-07 18:23:31

+0

我将ReadLines替换为ReadAllLines,上述注释中的错误消失,但现在代码位于“continue”下面。无法访问 – user3542613 2014-12-07 18:39:22

+0

为什么这个答案没有更多的upvoted? – fjardon 2016-10-05 06:46:07

34

要评论使用ReadAllLines()在OP的评论中的回答CSharpie;如果MyFile.txt是非常大的文件,它可能会对性能产生巨大影响。

File.ReadAllLines().First()居然会读所有线,将其存储在string[],然后拿第一。因此,如果您的文件非常大,它会将所有这些行存储在数组中,这可能需要一些时间。

的替代性和性能更好的选择是只打开一个StreamReader和只读第一行。正确的实施将是;

String[] languages = new String[] { "english", "french", "german"}; 
string firstLine; 

using(StreamReader reader = new StreamReader("MyFile.txt")) 
{ 
    firstLine = reader.ReadLine() ?? ""; 
} 

if(languages.Contains(firstLine)) 
{ 
    //... 
} 

采用using会照顾关闭和处置的读者。此外,使用??将确保永远不会返回null(因而节省您在Contains()ArgumentNullException)。

+0

我没有使用File.ReadAllLines但File.ReadLines。 – CSharpie 2014-12-07 19:54:58

+0

@CSharpie,是我不好,看OP的评论,并认为他使用'ReadAllLines()'。我在我的答案中编辑了这个! – 2014-12-07 20:00:10

2

虽然职位是从2014年起,利用更近的方法更有效的解决方案可能是这一个:

System.IO.StreamReader readingFile = new System.IO.StreamReader(filePath); 

string readingLine = readingFile.ReadLine(); 

这样,可以防止读几行,并需要得到第一个使用LINQ。

+0

2014年这种方法是否存在? [Here](https://msdn.microsoft.com/fr-fr/library/system.io.streamreader(v = vs.110).aspx),文档日期形式为2016。 – 2017-05-29 21:50:59

+0

直到我发布了答案之后,我才注意到原始问题的日期,但是,我并没有把它记下来,因为它可能对其他人有利,因此编辑了答案来作出澄清 – KeOt777 2017-05-29 22:33:18

+0

这是与Dion V的回答相同。 – CSharpie 2017-08-12 07:32:39

相关问题