winforms 我怎么才能检查一个文件夹是否为空的特定文件类型,然后删除该文件夹?

gdx19jrr  于 2022-12-27  发布在  其他
关注(0)|答案(1)|浏览(166)

我想删除每个文件夹内没有gif图像文件。我不介意如果它有文本文件或任何其他文件,如果文件夹/s有没有gif文件删除它。

var dirsRad = Directory.GetDirectories(radarImagesFolder);
            var dirsSat = Directory.GetDirectories(satelliteImagesFolder);

            if(dirsRad.Length > 0)
            {
                foreach(string dir in dirsRad)
                {
                    if(!Directory.EnumerateFileSystemEntries(dir).Any())
                    {
                        Directory.Delete(dir, true);
                    }
                }
            }

            if(dirsSat.Length > 0)
            {
                foreach (string dir in dirsSat)
                {
                    if (!Directory.EnumerateFileSystemEntries(dir).Any())
                    {
                        Directory.Delete(dir, true);
                    }
                }
            }

这个代码的问题是,如果在文件夹/s有一个文本文件,它不会删除文件夹/s,我想,即使有任何文件不是gif类型删除文件夹/s
仅当文件夹包含gif图像文件时,才保留文件夹。
尝试上面的代码,但文件夹/s其中一些有一个文本文件内,所以它不会删除文件夹/s.

5fjcxozz

5fjcxozz1#

你可以使用枚举方法的重载来获取以.gif结尾的文件,如果没有,就删除文件夹(包括子目录和文件)。
这仅适用于当前目录。如果dirsRad的子目录中包含.gif文件,则它们将被删除。如果这不是您想要的,请谨慎操作。
它还假设GIF文件仅由其小写扩展名标识,如果您怀疑某些GIF文件不遵守这一点,例如写为.GIF的文件,则必须使该方法不区分大小写。
这就转化为这样一个简单的变化:

if(dirsRad.Length > 0)
            {
                foreach(string dir in dirsRad)
                {
                    if(!Directory.EnumerateFileSystemEntries(dir, "*.gif").Any())
                    {
                        Directory.Delete(dir, true);
                    }
                }
            }

相关问题