我有一个应该解压缩并安装其他应用程序的应用程序,我通过网络获得带有安装映像的新Zip文件,然后解压缩并安装.所有文件除了Zip文件每次都带有不同名称的部分因为版本更改而我所有的C:\都有很多不同版本的.zip文件.Zip我正在使用的Msi文件没有被覆盖,但是在解压缩之前我只是删除了它.
我想删除C:上的所有.msi和.zip文件.我怎么能通过C#做到这一点?
谢谢...
Mar*_*rco 54
你可以尝试这样的事情:
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 { }
Run Code Online (Sandbox Code Playgroud)
请注意,我首先尝试将属性设置为"normal",因为File.Delete()如果file是只读的则会失败...
请注意使用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;
}
Run Code Online (Sandbox Code Playgroud)
所以你可以改变我的部分答案
List<FileInfo> files = GetFiles(@"C:\", ".msi", ".zip");
Run Code Online (Sandbox Code Playgroud)
mas*_*_99 15
foreach (string file in Directory.GetFiles("C:\\myDir", "*.zip").Where(item => item.EndsWith(".zip"))
{
File.Delete(file);
}
Run Code Online (Sandbox Code Playgroud)
你可以通过更改GetFiles算法来实现更多模式
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));
}
Run Code Online (Sandbox Code Playgroud)
你可以简单地这样做:
Directory.EnumerateFiles("C:\\MyDirectory", "*.ext").ToList().ForEach(x => File.Delete(x));
Run Code Online (Sandbox Code Playgroud)
不要忘记包含 System.IO