OpenFileDialog C# custom filter like 'ABC*.pdf'

Updated

Changed my solution a little after realizing the following would be better:

This is not a complete "hard filter", but making use of the FileName property should still cover your needs:

using System;
using System.Windows.Forms;

namespace TestingFileOpenDialog
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.openFileDialog1.FileName = "pro*";
            this.openFileDialog1.Filter = "Pdf Files|*.pdf";
            this.openFileDialog1.ShowDialog();
        }
    }
}

I suppose this might depend on which OS you are working with, but it did work in my case any way, on Windows 8.

I also realize that this does not filter out all irrelevant files "permanently", but it does at least provide an initial filter.

Result:
(Without pro* in the FileName-field, this will show several other PDF files).

enter image description here


Yes and no.

No: Look at the MSDN, page. The filter is not used that way. It's only for the extensions.

Yes: You could write your own class that extends/mimics the OpenFileDialog, have some regular expressions to do what you want, and simply run that match against all the files in the current folder (Might take some work, but if you really want it so bad, go for it :) )


As stated in my comment:

Unfortunately it's not possible. But you can create your own FileDialog

To create your own FileDialog, you can use the following methods:

  string[] Directories = Directory.GetDirectories(Path);
  string[] Files = Directory.GetFiles(Path);

Now filter the Files-Array to your specifications:

List<string> wantedFiles = Files.ToList().Where(x => x.StartsWith("ABC"));

To get the file Icons, you have to use the DLLImport of Shell32.dll:

[DllImport("shell32.dll")]

The code provided in this SO question should solve the problem.

A project that implements own FileDialogs written by my brother can be found here: Download project

In short, this should do the trick:

foreach (string file in Directory.GetFiles(Path)
                                 .Where(x => new DirectoryInfo(x).Name.StartsWith("ABC")))
{
    //Add the string to your ListView/ListBox/...
}