如何使文件扩展名选择适用于小写和大写?

时间:2014-12-01 20:27:05

标签: c# .net winforms

private void button1_Click(object sender, EventArgs e)
        {
            if (this.folderBrowserDialog1.ShowDialog() != DialogResult.Cancel)
            {

                string dir = this.folderBrowserDialog1.SelectedPath;
                var extensions = new List<string> { ".jpg", ".gif", ".png" };
                images = Directory.GetFiles(dir, "*.*", SearchOption.AllDirectories).Where(fileName => extensions.Any(extension => fileName.EndsWith(extension))).ToArray();
                listBox1.Items.AddRange(images);
                if (listBox1.Items.Count > 0)
                {
                    beginConvertionToolStripMenuItem.Enabled = true;
                }
            }
        }

现在它只适用于.jpg .gif .png小写的情况我怎样才能使它也适用于大写JPG GIF PNG而不再添加扩展名作为大写字母manualy?

1 个答案:

答案 0 :(得分:3)

您可以将String.Equals与重载StringComparison一起使用,例如InvariantCultureIgnoreCase。我也会使用System.IO.Path class:

var images = Directory.GetFiles(dir, "*.*", SearchOption.AllDirectories)
    .Where(fileName => extensions
        .Any(extension => extension.Equals(
            Path.GetExtension(fileName), 
            StringComparison.InvariantCultureIgnoreCase)))
    .ToArray();

如果extension可能是null我更喜欢StringComparer.InvariantCultureIgnoreCase.Equals

var images = Directory.GetFiles(dir, "*.*", SearchOption.AllDirectories)
    .Where(fileName => extensions
        .Any(extension => StringComparer.InvariantCultureIgnoreCase.Equals(
            Path.GetExtension(fileName),
            extension)))
    .ToArray();

但您可以直接使用Enumerable.Any代替Enumerable.Contains

var images = Directory.GetFiles(dir, "*.*", SearchOption.AllDirectories)
    .Where(fileName => extensions
        .Contains(Path.GetExtension(fileName), StringComparer.InvariantCultureIgnoreCase))
    .ToArray();