如何删除某些扩展名的文件?

时间:2011-11-15 07:15:23

标签: c# .net

我有一个应该解压缩并安装其他应用程序的应用程序,我通过网络获取带有安装映像的新Zip文件,然后解压缩并安装。所有文件除了Zip文件每次都带有不同名称的部分因为版本更改而我所有的C:\都有很多不同版本的.zip文件。 Zip i&m; m不会覆盖Msi文件,但在解压缩之前只需删除它就可以了。

我想删除C:上的所有.msi和.zip文件。 我怎么能通过C#来做到这一点?

感谢...

7 个答案:

答案 0 :(得分:49)

您可以尝试这样的事情:

DirectoryInfo di = new DirectoryInfo(@"C:\");
FileInfo[] files = di.GetFiles("*.msi")
                     .Where(p => p.Extension == ".msi").ToArray();
foreach (FileInfo file in files)
    try
    {
        file.Attributes = FileAttributes.Normal;
        File.Delete(file.FullName);
    }
    catch { }

请注意,我首先尝试将属性设置为“normal”,因为如果file是只读的,File.Delete()会失败...
请注意使用GetFiles():有关详细信息,请参阅this link

<强>编辑:
如果您需要获得多个扩展程序,可以使用它:

public List<FileInfo> GetFiles(string path, params string[] extensions)
{
    List<FileInfo> list = new List<FileInfo>();
    foreach (string ext in extensions)
        list.AddRange(new DirectoryInfo(path).GetFiles("*" + ext).Where(p =>
              p.Extension.Equals(ext,StringComparison.CurrentCultureIgnoreCase))
              .ToArray());
    return list;
}

所以你可以将我的部分答案改为

List<FileInfo> files = GetFiles(@"C:\", ".msi", ".zip");

答案 1 :(得分:15)

foreach (string file in Directory.GetFiles("C:\\myDir", "*.zip").Where(item => item.EndsWith(".zip"))
        {
            File.Delete(file);
        }

您可以通过更改GetFiles Algo

来实现更多模式
public FileInfo[] GetFiles(DirectoryInfo dir, string searchPatterns, params char[] separator)
{
   ArrayList files = new ArrayList();
   string[] patterns = searchPatterns.Split(separator);
   foreach (string pattern in patterns)
   {
      if (pattern.Length != 0)
      {
         files.AddRange(dir.GetFiles(pattern).Where(item => item.EndsWith(pattern));
      }
   }
   return (FileInfo[])files.ToArray(typeof(FileInfo));
}

答案 2 :(得分:4)

var files = Directory.GetFiles(@"C:\", "*.*", SearchOption.AllDirectories)
            .Where(s => s.EndsWith(".msi") || s.EndsWith(".zip"));

foreach (string file in files)
{
   File.Delete(file);
}

答案 3 :(得分:4)

你可以这样做:

Directory.EnumerateFiles("C:\\MyDirectory", "*.ext").ToList().ForEach(x => File.Delete(x));

不要忘记包含System.IO

答案 4 :(得分:2)

C#System.IO.Directory对象允许您查找文件(例如* .zip)和System.IO.File允许您删除它们:

http://msdn.microsoft.com/en-us/library/wz42302f.aspx

http://msdn.microsoft.com/en-us/library/system.io.file.aspx

此外,.Net 3.5 ++文件“ZipPackage”可能允许您直接在.zip文件中执行您想要的部分/全部内容(不必先提取任何内容):

http://msdn.microsoft.com/en-us/library/system.io.packaging.zippackage%28v=VS.90%29.aspx

答案 5 :(得分:1)

您可以列出具有特定扩展名的所有文件 并删除所有

    var list = System.IO.Directory.GetFiles("*.zip");
    foreach (var item in list)
    {
        System.IO.File.Delete(item);
    }

答案 6 :(得分:0)

Directory.GetFiles(@"C:\", "*.pdf").ToList().ForEach(f => File.Delete(f));