2014-12-07 187 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

相關問題