删除Doc文件并保留Docx文件

时间:2015-09-04 13:18:24

标签: c# winforms

我正在尝试删除同时包含BEGIN RSA PRIVATE KEY文件的文件夹中的.doc个文件。

这是我到目前为止的尝试:

.docx

删除扩展名为string[] files = Directory.GetFiles(Path, "*.doc", SearchOption.AllDirectories); foreach (string f in files) { File.Delete(f); } .doc的单词文档。 我只想删除.docx个文件并保留.doc个文件。

6 个答案:

答案 0 :(得分:2)

过滤您所追求的确切扩展名的结果。

string[] files = Directory.GetFiles(Path, "*.doc", SearchOption.AllDirectories);
foreach (string f in files.Where(f => String.Compare(".doc", f.Extension, StringComparison.OrdinalIgnoreCase) == 0))
{
    File.Delete(f);
}

答案 1 :(得分:2)

你可以尝试

DirectoryInfo Dir = new DirectoryInfo(path);


foreach (FileInfo file in Dir.GetFiles())
{

    //Code
}

因为您可以使用

访问文件扩展名
file.Extension
像这样。我想使用

更安全

答案 2 :(得分:2)

        string[] files = Directory.GetFiles(Path, "*.doc", SearchOption.AllDirectories);
        foreach (string f in files.Where(f => !f.EndsWith(".docx")))
        {
            File.Delete(f);
        }

Microsoft在方法DirectoryInfo.GetFiles方法(String,SearchOption)(https://msdn.microsoft.com/en-us/library/ms143327(v=vs.110).aspx)的概述中提供了此问题的示例。他们说:

  

以下列表显示了searchPattern参数的不同长度的行为:

  • “*。abc”返回具有扩展名的文件 of.abc,.abcd,.abcde,.abcdef等。
  • “*。abcd”仅返回扩展名为.abcd的文件。
  • “*。abcde”仅返回扩展名为.abcde的文件。
  • “*。abcdef”仅返回扩展名为.abcdef的文件。

您需要过滤Directory.GetFiles的结果集,以便您只对所需的文件进行操作。

答案 3 :(得分:2)

Directory.GetFiles Method (String, String, SearchOption)的MSDN文档包含以下注释:

  

searchPattern 中使用星号通配符时   as" * .txt",指定扩展名中的字符数   影响搜索如下:

     

•如果指定的扩展名正好是三个字符长,那么   方法返回扩展名以指定开头的文件   延期。例如," * .xls"返回" book.xls"和   " book.xlsx"

     

•在所有其他情况下,该方法返回与其完全匹配的文件   指定的扩展名例如," * .ai"返回" file.ai"但不是   " file.aif"

     

使用问号通配符时,此方法返回   仅限与指定文件扩展名匹配的文件。例如,给定   两个文件," file1.txt"和" file1.txtother",在目录中搜索   "文件的模式?.txt"只返回第一个文件,而返回搜索   模式"文件* .txt"返回两个文件。

解决微软问题的最简单方法是“有用”#34;以这种方式过滤Directory.GetFiles调用的结果:

string[] files = Directory.GetFiles(filesPath, "*.doc", SearchOption.AllDirectories);

foreach (string f in files.Where(f => Path.GetExtension(f) == ".doc"))
{
    File.Delete(f);
}

我重命名了您的Path变量,因为它与保存静态System.IO.Path方法的GetExtension类冲突。作为一般经验法则,给出与现有类同名的变量是一个坏习惯。

答案 4 :(得分:1)

出现此问题是因为Windows忽略了超过3个字符的文件扩展名的任何部分。

将代码更改为此将解决此问题:

var files = Directory
   .GetFiles(Path, "*.doc", SearchOption.AllDirectories)
   .Where(w => w.ToLowerInvariant().EndsWith(".doc"));

答案 5 :(得分:1)

您可以获得第一次扩展,检查.doc文件。然后调用删除功能。

string extension = System.IO.Path.GetExtension(@"c:\yourfile.docx");
if(extension != ".docx")
{
   //DELETE FILE HERE
}