Пользовательский фильтр OpenFileDialog C#, например "ABC".в формате PDF'

можно ли указать пользовательские фильтры, такие как ' ABC*.pdf 'что означает:" показать все PDF, который начинается с ABC"?

Я могу только указать *.документ PDF.* ,док, ., etc.

спасибо Флориан!--1-->

5 ответов


Обновлено

немного изменил мое решение, поняв, что следующее Было бы лучше. Это не полный "жесткий фильтр", но использование FileName свойство должно в принципе дать вам то, что вам нужно;

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();
        }
    }
}

Я полагаю, это может зависеть от того, с какой ОС вы работаете, но в моем случае это сработало в любом случае, на Windows 8.

Я также понимаю, что это не отфильтровать все ненужные файлы "постоянно", но он, по крайней мере, обеспечивает начальный фильтр.

результат:

enter image description here

без pro* в поле FileName-появится несколько других PDF-файлов.


да и нет.

нет: посмотри MSDN страница. Фильтр не используется таким образом. Это только для расширений.

Да: вы можете написать свой собственный класс, который расширяет / имитирует OpenFileDialog, иметь некоторые регулярные выражения, чтобы делать то, что вы хотите, и просто запустить это совпадение со всеми файлами в текущей папке (может потребоваться некоторая работа, но если вы действительно хотите этого так плохо, идите на это :) )


как указано в моем комментарии:

к сожалению это не возможно. Но вы можете создать свой собственный FileDialog

чтобы создать свой собственный FileDialog, вы можете использовать следующие методы:

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

теперь фильтр Files-массив к вашим спецификациям:

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

чтобы получить значки файлов, вы должны использовать DLLImport из Заshell32.dll:

[DllImport("shell32.dll")]

код, указанный в этом поэтому вопрос должны решить проблему.

проект, который реализует собственные FileDialogs, написанные моим братом, можно найти здесь: проект скачать

короче говоря, это должно сделать трюк:

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

ответ прямой : нет

вы можете установить фильтры, чтобы разрешить только определенные типы файлов с имущества Filter asbelow :

fileOpenDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";

но фильтрация имен файлов NOT возможно.

вы можете создать свой собственный OpenFIleDialog в этом случае.

см. эту ссылку для получения дополнительной информации:как создать настроенный диалог открытия файла в C#


используйте этот:

Microsoft.Win32.OpenFileDialog myDialog. = new Microsoft.Win32.OpenFileDialog();
myDialog..DefaultExt = ".pdf";
myDialog.Filter = "FilesIWant (ABC*.pdf)|ABC*.pdf