Можно ли указать настраиваемые фильтры, такие как "ABC *.pdf", что означает: "Показать весь PDF, который начинается с ABC"?
Я могу указать только *.pdf, *.doc,. и т.д.
Спасибо Флориан
Можно ли указать настраиваемые фильтры, такие как "ABC *.pdf", что означает: "Показать весь PDF, который начинается с ABC"?
Я могу указать только *.pdf, *.doc,. и т.д.
Спасибо Флориан
Обновлено
Немного поменял мое решение после того, как понял, что будет лучше:
Это не полный "жесткий фильтр", но использование свойства 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).
Да и нет.
Нет. Посмотрите MSDN, стр.. Фильтр не используется таким образом. Это только для расширений.
Да. Вы можете написать свой собственный класс, который расширяет/имитирует OpenFileDialog, имеет некоторые регулярные выражения, чтобы делать то, что вы хотите, и просто запускайте это совпадение со всеми файлами в текущей папке (Might возьмите какую-то работу, но если вы действительно хотите, чтобы это было так плохо, пойдите для нее:))
Как указано в моем комментарии:
К сожалению, это невозможно. Но вы можете создать свой собственный 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/...
}
Ответ прост: НЕТ
Вы можете установить фильтры для разрешения только определенных типов файлов с свойством Filter
ниже:
fileOpenDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
но имена файлов фильтров NOT
Возможны.
В этом случае вы можете создать свой собственный пользовательский OpenFIleDialog
.
См. эту ссылку для получения дополнительной информации: Как создать настраиваемый диалог открытия файла на С#
Используйте это:
Microsoft.Win32.OpenFileDialog myDialog. = new Microsoft.Win32.OpenFileDialog();
myDialog..DefaultExt = ".pdf";
myDialog.Filter = "FilesIWant (ABC*.pdf)|ABC*.pdf