2010-05-18 10 views
3

je le code suivant dans mon C# programme:OpenFileDialog - afficher uniquement les noms de fichiers qui ne disposent pas des extensions

 OpenFileDialog fDialog = new OpenFileDialog(); 
     fDialog.Title = "Open a file"; 
     fDialog.Filter = 
      "NCF files (*.ncf)|*.ncf|All files (*.*)|*.*|No Extensions (*.)|*."; 



Je veux être en mesure d'avoir le choix de l'utilisateur parmi les options suivantes:

* NCF (fichiers avec extension .NCF uniquement)
**. * (tous les fichiers)

et les fichiers qui ont aucune extension tels que:

filewithnoextension



Je sais *** * va le faire, mais il affiche aussi le NCF, .TXT, et tous les autres fichiers. dans le même répertoire.

Je veux juste être en mesure d'afficher les noms de fichiers qui n'ont pas d'extensions.



Filtrage avec *. ne fait pas l'affaire. Cela fonctionne très bien lorsque vous le faites avec une fenêtre DOS (dir *.), mais C# semble ignorer le *. filtre.





Est-il possible que je peux le faire avec C#?

Merci. Un fichier readme a normalement une extension.

Répondre

0

Si l'autre logiciel crée ces fichiers dans le même endroit, pourquoi ne pas avoir votre le code ajouter une extension (quelque chose d'anodin comme ".XXX") à tous les fichiers d'extension moins dans ce dossier, et puis montrent la boîte de dialogue

Edit:? Ou, consultez cet article MSDN:

http://msdn.microsoft.com/en-us/library/ms646960(VS.85).aspx

Des Filtres section:

Le message notification CDN_INCLUDEITEM fournit une autre façon de filtrer les noms que la boîte de dialogue affiche. Pour utiliser ce message, fournissez une procédure de hook OFNHookProc et spécifiez l'indicateur OFN_ENABLEINCLUDENOTIFY dans la structure OPENFILENAME lorsque vous créez la boîte de dialogue. Chaque fois que l'utilisateur ouvre un dossier, la boîte de dialogue envoie une notification CDN_INCLUDEITEM à votre procédure de raccordement pour chaque élément du dossier récemment ouvert. La valeur de retour de la procédure de crochet indique si la boîte de dialogue doit afficher l'élément dans la liste des éléments du dossier .

vers le bas au fond dans les procédures de hook de style Explorateur section, l'article explique comment faire. Fondamentalement, vous passez un gestionnaire d'événements à la boîte de dialogue OpenFile, et chaque fois que l'utilisateur navigue vers un nouveau dossier, la boîte de dialogue parcourt tous les fichiers du dossier et appelle votre gestionnaire d'événements pour chacun d'eux. Dans le gestionnaire d'événements, vous devez mettre votre code pour déterminer si le fichier a une extension ou non, et renvoyer vrai ou faux, en conséquence.

+0

Bonne idée! Merci! – fraXis

+0

Essayez la deuxième idée et laissez-moi savoir si cela fonctionne. – MusiGenesis

+0

Salut, je cherche une réponse à ce problème, quelqu'un est mis en œuvre comme votre idée? ça fonctionne?? comment faire?? –

2

Je suppose que vous avez fait, mais avez-vous vérifié cette option de dossier pour voir les extensions de types de fichiers connus? Cela a-t-il changé quelque chose?

EDIT # 1

Franchement, je doute que vous seriez en mesure de rendre les fichiers d'affichage OpenFileDialog sans extension, comme la propriété Filter est basée sur l'extension.

Peut-être que vous pourriez hériter la base de votre propre mise en œuvre OpenFileDialog en utilisant l'exemple, comme DirectoryInfo, objets espace de noms System.IO qui vous permettra d'obtenir les fichiers de dossiers broutées avec la méthode Getfiles(), puis vous filtrer à travers LINQ pour afficher les fichiers avec aucune extension uniquement avec la propriété FileInfo.Extension.

EDIT # 2

Depuis le OpenFileDialog est sealed, vous pouvez l'utiliser comme un type imbriqué et mettre en œuvre vos propres méthodes utilisant ce type imbriqué.

J'espère que cela vous aide!

+0

J'utilise simplement readme comme exemple. Je vais le changer dans mon poste parce que ce n'est pas un bon exemple. – fraXis

0

Je pensais que l'utilisation de *. fonctionnerait, mais ce n'est pas le cas, donc il semble que ce soit une limitation du contrôle OpenFileDialog.

Vous pouvez créer votre propre boîte de dialogue, mais le OpenFileDialog ne peut pas être hérité, ce qui se traduirait par beaucoup de travail pour une petite fonctionnalité.

Le fichier sans extension est-il créé par votre propre application? Si c'est le cas, vous pouvez lui donner une extension personnalisée pour votre filtrage. Si ce n'est pas, alors je crains que je ne peux pas penser à autre chose pour vous aider :(

Bonne chance!

+0

Non. Un autre logiciel crée les fichiers sans extension. Mon client veut juste pouvoir voir les fichiers qui n'ont pas d'extensions afin qu'il puisse facilement les ouvrir dans un répertoire avec d'autres fichiers qui ont des extensions. – fraXis

+1

Même si OpenFileDialog est scellé (non héritable), vous pouvez l'utiliser comme un type imbriqué. Par exemple, en utilisant une propriété qui obtiendra le NativeDialog. Ensuite, vous écrivez votre méthode en utilisant toujours la propriété NativeDialog et vous avez terminé. –

1

Je sais que cela fonctionne:

fDialog.Filter = "No extension Files|" + null; 

Je ne l'ai pas testé avec plusieurs sélections ..

Altough c'est un ancien poste, je pensais que ce serait quelqu'un bénéficier à la recherche d'un moyen d'afficher uniquement fichiers sans extension ..