2010-09-16 148 views
1

我找不到這個問題的解決方案:讀取文件的問題

我寫一個程序,讀取目錄中的所有文件,並把它們放入一個列表框。 當用戶從列表框中選擇一個文件,該程序讀取選定的文件,並打印出一些信息...

問題是,在第一次選擇我的程序「停止工作」。他不會崩潰,但是當我嘗試選擇另一個文件時,他什麼都不做。

我想通了,這個問題是:

private String porocilo(String s) 
{ 
file = "/path to file/"; 
TextReader tr = new StreamReader(file); //<- problem here 
//... 
tr.close(); 
return someinfo; 
} 
//.. 
//Call function: 
private void listBox1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
label1.Text = porocilo(listBox1.SelectedItems[0].ToString()); 
} 

去除(問題)通常排列在程序選擇文件後,但沒有這個我不能閱讀文件和我的程序沒有做任何東西。

有人能告訴我我哪裏錯了嗎?

BR,Wolfy

回答

2

如果您發佈的代碼確實是您所使用的代碼(加上缺少分號),那麼你就沒有看到什麼情況發生的原因是因爲你的代碼保持打開和讀取同一個文件,而不是文件用戶選擇。您正在將file設置爲一個常量路徑/文件名並從中讀取,並且您沒有使用s參數。

+0

我的錯誤:) file =「/ path to file /」+ s – Wolfy 2010-09-16 10:09:30

+1

@Wolfy:請使用'Path.Combine'而不是斜槓。 :) – Timwi 2010-09-16 10:37:42

0

它看起來像你有你的porocilo方法的硬編碼路徑。也就是說,新的StreamReader正在採用它作爲參數,文件而不是s。 所以它只會打開一個文件,而不是你選擇的文件。

private String porocilo(String s) 
{ 
//file = "/path to/file" // not sure what this is...??? 
TextReader tr = new StreamReader(s); //<- fix here 
//... 
tr.close(); 
return someinfo; 
} 
+0

如果你有時間,你可以添加代碼來驗證文件是否存在,以及其他各種事情。 – 2010-09-16 10:02:23

+0

該文件存在,因爲我通過閱讀它來獲取此列表... – Wolfy 2010-09-16 10:21:22

0

在您的列表框中選擇指數變化的方法,你需要分配選定值如下圖所示

//Call function: 
private void listBox1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
label1.Text = porocilo(listBox1.SelectedItem.Text); 
}

還要檢查你的「porocilo」功能,它使用的參數corectly

+0

porocilo參數工作正常,當我刪除TextReader tr =新的StreamReader(文件);文件路徑正在改變...... – Wolfy 2010-09-16 10:20:17