从包含的文件夹中删除文件

时间:2014-05-14 13:18:00

标签: c# .net

我正在寻找创建一个方法,当文件名包含通配符参数时,我可以用它来删除目录中的文件。

到目前为止,我有以下内容,但我似乎无法弄清楚如何删除包含通配符的fileEntries集合中的任何文件。

public static void DeleteFileContaining(string targetDirectory, string wildcard)
        {
            // Process the list of ALL files found in the directory. 
            string[] fileEntries = Directory.GetFiles(targetDirectory);

            foreach (var item in fileEntries)
            {               
                var itemToDelete = fileEntries.Contains(wildcard);
                 // delete where contains                
            }
        }

任何人都可以在一个带有目录和通配符的整洁方法调用中完成此操作或建议更有效的方法吗?

6 个答案:

答案 0 :(得分:3)

您可以使用GetFiles / EnumerateFiles的搜索模式(效率更高):

public static void DeleteFileContaining(string targetDirectory, string wildcard)
{
    string searchPattern = string.Format("*{0}*", wildcard);
    var filesToDelete = Directory.EnumerateFiles(targetDirectory, searchPattern);
    foreach (var fileToDelete in filesToDelete)
    {
        try{
            File.Delete(fileToDelete);
        }catch(Exception ex){
            // log this...
        }
    }
}

请查看remarks部分以获取更多信息。

答案 1 :(得分:1)

首先,这一行是错误的:

var itemToDelete = fileEntries.Contains(wildcard);

返回一个布尔值,指示至少有一个文件名是完全匹配的。你想要的是:

var items = fileEntries.Where(name => name.Contains(wildcard));

其次,你甚至不需要过滤这样的文件名,你可以简单地使用另一个采用搜索模式的GetFiles overload

最后,您可以使用File.Delete来实际删除这些文件。

答案 2 :(得分:0)

我会使用通配符来获取我感兴趣的文件。

public static void DeleteFileContaining(string targetDirectory, string wildcard){
        string[] fileEntries = Directory.GetFiles(targetDirectory, wildcard);//something like *.jpg

        // delete all matching files. 
        foreach (string f in fileEntries)
        {
            File.Delete(f);
        }
}

答案 3 :(得分:0)

我不确定您是否要从文件夹中删除,但正如您所提到的,您想要从fileEntries集合中删除,您可以通过此方式实现

fileEntries = fileEntries.Where(a => !a.Contains(wildcard)).ToArray();

答案 4 :(得分:0)

这是我第一次尝试使用LINQ这样的东西,但这对我有用:

public static void DeleteFileContaining(string targetDirectory, string wildcard)
{
    Directory.GetFiles(targetDirectory).Where(j => j.Contains(wildcard)).ToList().ForEach(i => File.Delete(i));
}

或者这使用多行lambda表达式来包含错误处理:

public static void DeleteFileContaining(string targetDirectory, string wildcard)
{
    Directory.GetFiles(targetDirectory).Where(j => j.Contains(wildcard)).ToList().ForEach(i =>
        {
            try
            {
                File.Delete(i);
            }
            catch (Exception ex)
            {                        
                //do something here on exception.
            }
        });
}

答案 5 :(得分:-1)

您可能希望查看System.IO-Class以删除文件(http://msdn.microsoft.com/en-us/library/System.IO(v=vs.110).aspx