web-dev-qa-db-fra.com

Filtre personnalisé OpenFileDialog C # du type 'ABC * .pdf'

Est-il possible de spécifier des filtres personnalisés tels que 'ABC * .pdf' qui signifie: "Afficher tout PDF commençant par ABC"?

Je peux seulement spécifier * .pdf, * .doc,. , etc.

Merci Florian

12
user2071938

Mis à jour 

Modifié un peu ma solution, après avoir réalisé que ce serait mieux. Ce n'est pas un "filtre dur" complet, mais l'utilisation de la propriété FileName devrait en principe vous donner ce dont vous avez besoin.

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

Je suppose que cela dépend du système d'exploitation avec lequel vous travaillez, mais cela a fonctionné de toute façon dans mon cas, sous Windows 8.

Je me rends également compte que cela ne filtre pas "en permanence" tous les fichiers non pertinents, mais il fournit au moins un filtre initial. 

Résultat:

enter image description here

Sans pro* dans le champ NomFichier, cela affichera plusieurs autres fichiers PDF.

23
Kjartan

Oui et non.

No: Regardez la page MSDN ,. Le filtre n'est pas utilisé de cette façon. C'est seulement pour les extensions.

Yes: vous pouvez écrire votre propre classe qui étend/imite OpenFileDialog, avoir des expressions régulières pour faire ce que vous voulez, et simplement exécuter cette correspondance sur tous les fichiers du dossier actuel (peut vous le voulez vraiment, allez-y :))

3
Noctis

Comme indiqué dans mon commentaire:

Malheureusement ce n'est pas possible. Mais vous pouvez créer votre propre FileDialog 

Pour créer votre propre FileDialog, vous pouvez utiliser les méthodes suivantes:

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

Filtrez maintenant le tableau Files- selon vos spécifications:

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

Pour obtenir les icônes de fichier, vous devez utiliser la DLLImport de Shell32.dll:

[DllImport("Shell32.dll")]

Le code fourni dans cette question SO devrait résoudre le problème.

Un projet qui implémente ses propres FileDialogs écrits par mon frère peut être trouvé ici: Télécharger le projet

En bref, cela devrait faire l'affaire:

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

La réponse est simple: NON

Vous pouvez définir les filtres pour autoriser uniquement certains types de fichiers avec la propriété Filter asbelow:

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

mais le filtrage des noms de fichiers est NOT Possible.

Dans ce cas, vous pouvez créer votre propre variable OpenFIleDialog personnalisée.

Voir ce lien pour plus d’informations: Comment créer un dialogue de fichier ouvert personnalisé en C #

0