Фильтр OpenFileDialog С#, подобный 'ABC *.pdf'

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

Я могу указать только *.pdf, *.doc,. и т.д.

Спасибо Флориан

Ответ 1

Обновлено

Немного поменял мое решение после того, как понял, что будет лучше:

Это не полный "жесткий фильтр", но использование свойства 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.

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

Результат:
(Без pro* в поле FileName это покажет несколько других файлов PDF).

enter image description here

Ответ 2

Да и нет.

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

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

Ответ 3

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

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

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

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

Теперь отфильтруйте Files -Array в соответствии со своими спецификациями:

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

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

[DllImport("shell32.dll")]

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

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

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

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

Ответ 4

Ответ прост: НЕТ

Вы можете установить фильтры для разрешения только определенных типов файлов с свойством Filter ниже:

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

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

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

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

Ответ 5

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

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