我正在尝试删除同时包含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
个文件。
答案 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参数的不同长度的行为:
您需要过滤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
}