[英]Searching for files in a Listbox
我試圖讓一個應用程序生成文件名,然后搜索文件是否存在。 當前的問題是,循環只能找到列表中的最后 2 個文件。
在我下面的示例屏幕截圖中,您可以看到如果我重新排序文件,它仍然只能找到最后 2 個。
只是為了它,我將列表框更改為文本框以嘗試循環,結果相同。 當前代碼再次使用列表框。
最后,“商店編號”框是用戶填寫的文本框。 rest 是列表框。
private void findButton_Click(object sender, EventArgs e)
{
string dirPath = @"cashFiles\";
foreach (object file in outputBox.Items)
{
// Search 1
if (File.Exists(dirPath + "1\\" + file.ToString()))
{
resultBox.Items.Add("Found " + dirPath + @"1\" + file);
foundfileBox.Items.Add(dirPath + @"1\" + file);
}
else
{
resultBox.Items.Add("Not Found " + dirPath + @"1\" + file);
}
}
}
private void generateButton_Click(object sender, EventArgs e)
{
var textLines = storeNumbers.Text.Split('\n');
foreach (var line in textLines)
{
outputBox.Items.Add("c" + line + datebox.Text + "0.dat");
outputBox.Items.Add("c" + line + datebox.Text + "1.dat");
}
}
不要簡單地在任何找到的\n
字符處拆分。 那就是問題所在。
在 Windows 上,換行符通常編碼為\r\n
。
因此,例如,在您的 Store Numbers 文本框中,您有字符串"0047\r\n0049"
。
執行\n
拆分將產生兩個字符串"0047\r"
和"0049"
。 請注意,第一個字符串包含\r
字符。
因此,從第一個字符串生成的所有文件名也包含\r
字符。 顯然,您的cashFiles目錄中沒有任何文件具有這樣的\r
字符。
您在 GUI 中看不到這些\r
字符,因為所有這些控件都沒有明顯地呈現字符\r
。 但是,當您調試代碼並在調試器中逐個字符地仔細檢查生成的文件名時,您會注意到某些生成的文件名中有\r
。
無論字符串是否包含 Windows 風格或 Unix/Linux 風格的換行符,您都可以通過不同的方式正確拆分帶有 Store Numbers 的字符串。 一種簡單的方法是使用Environment.NewLine
,它提供底層操作系統用於換行的字符序列。
var textLines = storeNumbers.Text.Split(Environment.NewLine);
這依賴於在 GUI 控件中輸入的換行符通常由底層操作系統控制的事實。
如果出於任何原因,字符串中的換行字符序列與底層操作系統使用的換行字符序列不匹配,另一種相對簡單的方法可能是:
var textLines = storeNumbers.Text.Split("\r\n".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.