【问题标题】:Delete a file based on the value of the SelectedItem in a ListBox根据 ListBox 中 SelectedItem 的值删除文件
【发布时间】:2014-03-23 19:23:04
【问题描述】:

如何在 C# 中根据 ListBox 中的值删除文件。这是我的代码,它不起作用:

File.Delete( folderBrowserDialog1.SelectedPath+ "\" +listBox1.SelectedItem.ToString());

【问题讨论】:

  • 这是一个 Windows 窗体应用程序吗?
  • 阅读您发布的代码。您从列表框中删除所选项目,然后尝试使用列表框中的所选项目。它不存在 - 你删除了它,记得吗?
  • 您遇到了什么样的错误?从第一次编辑到现在,我可以看到一些问题,但是......很高兴看到你得到了什么,这样我们就不必 100% 用勺子喂你。

标签: c# .net winforms listbox


【解决方案1】:

我假设你得到一个空异常。您不能从 ListBox 中删除项目,然后期望能够将其转换为字符串。

此外,您正在使用反斜杠 "\" 转义右引号。您应该将其写为@"\""\\"String.Format("{0}\{1}", path, fileName)Path.Combine(path, fileName)

我个人更喜欢后者,因为我可以避免插入斜线并使其看起来更干净。

除此之外,最好在 IO 代码周围设置一个 try{}catch{} 块,以捕获尝试删除文件时可能发生的任何异常。如果您处于多用户环境中并且其他人移动该文件、打开它等,除非您的代码考虑到它,否则您将收到异常。

我还想检查所选项目是否为空。个人喜好。

if (listBox1.SelectedItem == null)
{
    System.Diagnostics.Debug.WriteLine("Selection is null");
    return;
}

try
{
    File.Delete(Path.Combine(folderBrowserDialog1.SelectedPath,
                             listBox1.SelectedItem.ToString()));
}
catch (System.IO.IOException e)
{
    System.Diagnostics.Debug.WriteLine(e.Message);
}

如果要验证文件是否存在,可以使用:

if (File.Exists(Path.Combine(folderBrowserDialog1.SelectedPath,                     
                             listBox1.SelectedItem.ToString())))
{
    // your code here
}

但如果您有类似上述的 try{}catch{} 块,则没有必要。

除了上述之外,我想补充一点,当您编写原始代码时,我看到了一些有趣的事情。您正在删除一个文件,从选择框中删除一个项目,然后刷新该选择框。我可以推荐使用ObservableCollection<T>() 吗?每当您通过添加或删除项目来更新此集合时,从该集合中获取其项目的任何内容都将收到更新通知。对于 ListBox,它会自行刷新。

【讨论】:

  • 它的意思是该文件被另一个进程使用所以它不能被删除
  • @OkwuPrecious 是什么文件?
  • 感谢您的所有回答。它是一个txt文件
  • @OkwuPrecious 嗯,我希望你会说这是一个 Word 文档,然后很容易弄清楚发生了什么(它有问题)。不管怎样,下载这个:technet.microsoft.com/en-us/sysinternals/bb896653 并找出哪个进程打开了它。删除由另一个进程打开的文件几乎是不可能的(嗯......这是可能的,但它非常困难,即使我有一些 x86 知识,如果不撕掉我的头发,我也无法做到)。使用那个简洁的程序,它会为你省去很多麻烦。我个人拥有该站点的整个实用程序套件。
  • 我认为是因为它在列表框中,所以会锁定它
猜你喜欢
  • 2020-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-21
相关资源
最近更新 更多