【问题标题】:How to check for a specific file and delete it如何检查特定文件并将其删除
【发布时间】:2014-10-14 20:37:09
【问题描述】:

我正在使用 C# winform,我想在其中搜索文件夹中的特定文件并且我想删除它。 我怎样才能做到这一点。我正在尝试使用以下代码。

  private void button4_Click(object sender, EventArgs e)
    {
    string Filename = img_path.Text; // here i have the filename "sample.grf"
         if (Directory.GetFiles(@"E:\Debug").Where(x => x.Name == Filename).Any()) // getting error here
        {
           // i want to search here in above folder and delete the file.. how to do this
                System.IO.File.Delete(/dont know how to delte the particular file);

        }
       }

请帮忙

【问题讨论】:

  • 为什么不直接使用 File.Exists 呢?还有你得到的错误是什么
  • Directory.GetFiles 不会像您假设的那样返回FileInfo[],请使用if (new DirectoryInfo(@"E:\Debug").GetFiles().Where(x => x.Name == Filename).Any()),但您可以简单地使用if(File.Exists(Path.Combine(@"E:\Debug", Filename)))
  • x 是一个字符串,所以可能 x == 文件名,我认为每个人都忽略了这一点,因为他可能不知道整个路径。只是文件名。

标签: c# visual-studio-2010 visual-studio


【解决方案1】:

这很简单:

File.Delete(Path.Combine(@"E:\Debug", Filename));

无需先检查文件是否存在。如果没有,File.Delete 将什么也不做。

如果您可能有任何安全问题(例如用户输入..\SomethingElse\Important.doc),您需要确保该字段仅包含文件名。一种方法是:

if (Filename.ToCharArray().Intersect(Path.GetInvalidFileNameChars()).Any())
    return;

所以你的整个函数可能看起来是这样的:

private void button4_Click(object sender, EventArgs e)
{
    string Filename = img_path.Text;

    if (string.IsNullOrEmpty(Filename))
        return;

    if (Filename.ToCharArray().Intersect(Path.GetInvalidFileNameChars()).Any())
        return;

    File.Delete(Path.Combine(@"E:\Debug", Filename));
}

另外,button4_Click 不是一个维护起来非常友好的名称。您可能需要考虑将按钮和该功能重命名为有意义的名称。

【讨论】:

  • 删除button4_Click中的所有代码,然后添加一行:File.Delete(Path.Combine(@"E:\Debug", img_path.Text));
  • 'string' 不包含'Name' 的定义,并且找不到接受'string' 类型的第一个参数的扩展方法'Name'(您是否缺少 using 指令或程序集引用?)
  • @RadioSpace 是的,我注意到了这一点,并在发布后立即编辑了我的评论(刷新页面)
  • 错误:- The process cannot access the file '\\bin\Debug\sample.grf' because it is being used by another process. 使用 abve 文件发送到打印机。之后我需要删除。有什么办法可以等到进程完成然后删除文件
  • @StacyKebler 在尝试删除文件之前,您必须关闭文件上的所有文件句柄。由于我不知道您在代码中的其他地方对文件做了什么,所以我在这里无能为力。这是一个不同的问题。
【解决方案2】:

如果您知道该文件,请Delete()它:

File.Delete("C:\\mypath\\myfile.txt");

根据MSDN,对于已经不存在的文件不会抛出异常。

【讨论】:

    猜你喜欢
    • 2014-10-17
    • 2014-12-27
    • 2017-04-26
    • 1970-01-01
    • 2015-11-11
    • 2017-10-01
    • 2021-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多