2013-10-26 67 views
0

我正在製作一個簡單的程序,它在一組文件中搜索特定的名稱。我有大約23個文件要通過。要做到這一點,我使用StreamReader類,因此,寫更少的代碼,我已經包含類型的StreamReader的元素迭代StreamReader對象列表時空引用異常

List<StreamReader> FileList = new List<StreamReader>(); 

名單,我的計劃是遍歷目錄,打開每個文件:

foreach(StreamReader Element in FileList) 
{ 
    while (!Element.EndOfStream) 
    { 
     // Code to process the file here. 
    } 
} 

我已經打開了所有的FileList.The問題流的是,我得到一個

空引用異常

在while循環中的條件。

有人可以告訴我我在這裏做了什麼錯誤,爲什麼我得到這個異常,我可以採取什麼措施來糾正這個問題?

+1

warp你的代碼在'using'塊中,它會銷燬任何未被清理的對象。 – Khushi

+2

那麼'FileList'中是否有空引用?堆棧跟蹤的樣子*確切* –

+0

@Khushi你可以請詳細解釋一下,因爲我是新來的C# –

回答

2

隨着人們如上所述,請使用以下方法:

using (StreamReader sr = new StreamReader("filename.txt")) 
{ 
    ... 
} 

如果你想存儲名單上有自己的名字的文件,我建議你使用字典:

Dictionary<string, string> Files = new Dictionary<string, string>(); 

using (StreamReader sr = new StreamReader("filename.txt")) 
{ 
    string total = ""; 
    string line; 
    while ((line = sr.ReadLine()) != null) 
    { 
     total += line; 
    } 
    Files.Add("filename.txt", line); 
} 

要訪問它們:

Console.WriteLine("Filename.txt has: " + Files["filename.txt"]); 

,或者如果你想獲得的StreamReader它自身不是文件文本,你CA n使用:

Dictionary<string, StreamReader> Files = new Dictionary<string, StreamReader>(); 

using (StreamReader sr = new StreamReader("filename.txt")) 
{ 
    Files.Add("filename.txt", sr); 
} 
+0

感謝您的答案,你能告訴我爲什麼得到空引用異常? –

+0

@Patrik這一切都取決於你的StreamReaders代碼部分,你可能已經關閉了StreamReaders,保持StreamReader(文件)打開並不是一個好主意,因爲它使它在使用並且不允許任何其他應用程序使用它,Best方法是收集你想要的東西(字符串)然後關閉,將字符串保存到內存中。你不應該永遠打開它們。確保Dispose();被稱爲最好的方法是使用使用格式。 StreamWriters也採用相同的方式。 – 111WARLOCK111

+0

感謝您的建議。由於有很多文件,我已經做了兩個更多的函數來跟蹤流的打開和關閉,所以一旦這個函數被調用,我就調用關閉函數,所以沒有流打開。 –