代码之家  ›  专栏  ›  技术社区  ›  Luke_i

从列表框和文件夹中删除所选文件

  •  1
  • Luke_i  · 技术社区  · 8 年前

    我想从列表框和文件夹中删除选定的文件。目前,它只是将其从列表框中删除。现在我希望它也从文件夹中删除。谢谢

        private void tDeletebtn_Click(object sender, EventArgs e)
    
        {
            if (listBox1.SelectedIndex != -1)
                listBox1.Items.RemoveAt(listBox1.SelectedIndex);
        }
    
       private void TeacherForm_Load(object sender, EventArgs e)
        {
            DirectoryInfo dinfo = new DirectoryInfo(@"data\\Teachers\\");
            FileInfo[] Files = dinfo.GetFiles("*.xml");
            foreach (FileInfo file in Files)
            {
                listBox1.Items.Add(file.Name);
            }
        }
    
    2 回复  |  直到 8 年前
        1
  •  3
  •   Ian    8 年前

    如果您 listBox1.Items 包含文件路径,您可以通过取消引用 filepath 并使用删除它 File.Delete 这样地:

    private void tDeletebtn_Click(object sender, EventArgs e)
    {
        if (listBox1.SelectedIndex != -1){
            string filepath = listBox1.Items[listBox1.SelectedIndex].ToString();
            if(File.Exists(filepath))
                File.Delete(filepath);            
            listBox1.Items.RemoveAt(listBox1.SelectedIndex);
        }
    }
    

    也就是说,如果您将路径添加到 listBox1 使用 FullName 而不是使用 Name :

        DirectoryInfo dinfo = new DirectoryInfo(@"data\\Teachers\\");
        FileInfo[] Files = dinfo.GetFiles("*.xml");
        foreach (FileInfo file in Files)
        {
            listBox1.Items.Add(file.FullName); //note FullName, not Name
        }
    

    如果您不想在 列表框1 ,您还可以存储 Folder 名称单独命名,因为无论如何都不会更改:

    string folderName; //empty initialization
    .
    .
        DirectoryInfo dinfo = new DirectoryInfo(@"data\\Teachers\\");
        FileInfo[] Files = dinfo.GetFiles("*.xml");
        folderName = dinfo.FullName; //here you initialize your folder name
        //Thanks to FᴀʀʜᴀɴAɴᴀᴍ
        foreach (FileInfo file in Files)
        {
            listBox1.Items.Add(file.Name); //just add your filename here
        }
    

    然后你就这样使用它:

    private void tDeletebtn_Click(object sender, EventArgs e)
    {
        if (listBox1.SelectedIndex != -1){
            //Put your folder name here..
            string filepath = Path.Combine(folderName, listBox1.Items[listBox1.SelectedIndex].ToString());
            if(File.Exists(filepath))
                File.Delete(filepath);            
            listBox1.Items.RemoveAt(listBox1.SelectedIndex);
        }
    }
    
        2
  •  1
  •   Fᴀʀʜᴀɴ Aɴᴀᴍ    8 年前

    如果您有访问该文件的适当权限,这应该足够好:

    System.IO.File.Delete(listBox1.SelectedItem.ToString());
    

    上述代码仅适用于 ListBoxItem 是字符串。否则,您可以考虑将其强制转换为Data类并使用适当的属性。看到你发布的代码,这不是必需的。

    所以您的最终代码如下:

    private void tDeletebtn_Click(object sender, EventArgs e)
    
    {
        if (listBox1.SelectedIndex != -1)
        {
            System.IO.File.Delete(listBox1.Items[listBox1.SelectedIndex].ToString());
            listBox1.Items.RemoveAt(listBox1.SelectedIndex);
        }
    }
    

    请参见:

    请确保,您的 ListBox !