Подтвердить что ты не робот

Как удалить файл определенного расширения?

У меня есть приложение, которое должно распаковать и установить какое-либо другое приложение, я получаю новый Zip файл с установочным изображением через сеть, а затем должен разархивировать его и установить. Весь файл, за исключением части, в которой Zip файл приходит с различным именем каждый раз из-за изменения версии, и у всех моих C:\есть много .zip файлов с разными версиями. Msi файл не перезаписывается Zip, который я использую, но я более чем прав, просто удалив его перед распаковкой.

Я хочу удалить все .msi и .zip файлы на C:. Как я могу сделать это через С#?

спасибо...

4b9b3361

Ответ 1

Вы можете попробовать что-то вроде этого:

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.Delete() терпит неудачу, если файл доступен только для чтения...
Обратите внимание на использование GetFiles(): подробнее см. эту ссылку.

Редакция:
Если вам нужно получить более одного расширения, вы можете использовать это:

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");

Ответ 2

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));
}

Ответ 3

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

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

Ответ 4

Вы можете просто сделать это:

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

Не забудьте включить System.IO

Ответ 5

Объект С# 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

Ответ 6

Вы можете перечислить весь файл с определенным расширением и удалите все

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