簡體   English   中英

C#刪除列表框中的所有文件

[英]C# Delete all files in a listbox

我將一些文件添加到按鈕上的列表框:

if (Directory.Exists(DirString))
{
DirectoryInfo dirETC = new DirectoryInfo(DirString);
FileInfo[] Files = dirETC.GetFiles("*.txt");
foreach (FileInfo file in Files)
{
    listBox1.Items.Add(file.FullName);
}

如果用戶單擊刪除按鈕,我想刪除列表框中的所有文件,如下所示:

try
{
    listBox1.BeginUpdate();

    for (int i = 0; i < listBox1.Items.Count; i++)
        {
            string filename = listBox1.Items[i].ToString();

            if (File.Exists(filename))
            {
                File.Delete(filename);
                listBox1.Items.Remove(filename);
            }
        }
    listBox1.EndUpdate();
}
catch (Exception)
{
    return;
}

上面的代碼有效,但是每次我單擊全部刪除按鈕時,它只能刪除一個文件。 我想我需要在這里添加某種foreach循環來遍歷項目,但是我不確定什么是最好的方法。

Foreach語句不會允許你修改你迭代通過,而收集for意願。 您只需要注意索引:在您的解決方案中,刪除第一項(索引= 0)之后,下一項將成為第一項。 請嘗試以下方法:

listBox1.BeginUpdate();

for (int i = listBox1.Items.Count - 1; i >=0; i--)
{
    string filename = listBox1.Items[i].ToString();

    if (File.Exists(filename))
    {
        try
        {
            File.Delete(filename);
            listBox1.Items.Remove(filename);
        }
        catch (Exception)
        {
        }
    }
}
listBox1.EndUpdate();

當您使用for..next語句從要迭代的數組中刪除項目時,應考慮到每次刪除元素時,一個元素的數組計數減少,並且數組中的每個元素都以較低的索引移動。 因此,當刪除索引0處的元素時,索引1處的前一個元素將移至位置0,但您已經遍歷了索引0,因此您將跳過該元素並嘗試刪除索引處的元素2在刪除索引為0的項目之前。

解決方案很簡單。 以相反的順序循環(從最高元素到最低元素)

for (int i = listBox1.Items.Count-1; i >= 0 ; i--)
{
    string filename = listBox1.Items[i].ToString();
    if (File.Exists(filename))
    {
        File.Delete(filename);
        listBox1.Items.Remove(filename);
    }
}

將列表框的內容復制到字符串數組中,以防止在循環中從列表框中刪除項目時出錯。

// Copy the contents of the listbox into a string array
string[] filenameList = listBox1.Items.OfType<string>().ToArray();
try
{
    for (int i = 0; i < filenameList.Length; i++)
    {
        string filename = filenameList[i];
        if (File.Exists(filename))
        {
            File.Delete(filename);
            listBox1.Items.Remove(filename);
        }
    }

}
catch (Exception)
{

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM