guardar - open file dialog filter all files c#
Expresión regular para filtrar archivos en OpenFileDialog (5)
No creo que pueda hacerlo con la propiedad Filtro de OpenFileDialog, que solo filtra la lista de archivos en función de la extensión.
Creo que tendrá que dejar que el usuario elija un archivo xml, validar y luego mostrar el diálogo nuevamente si es un archivo _1. Puede suscribirse al evento FileOK y colocar aquí esta validación. Puede usar expresiones regulares para validar el nombre de archivo aquí. Eso es lo mejor que se puede hacer ... supongo.
Me gustaría saber cómo filtrar archivos en un cuadro de diálogo de archivo abierto (en winforms) basado en una expresión regular. Los archivos tienen todas las mismas extensiones (.xml). Los archivos grandes se dividen en varios archivos con el mismo nombre solo para separarlos con _1 ... Solo queremos mostrar los archivos sin _1 (primer archivo de datos)
el cuadro de diálogo de abrir archivo tiene un filtro de propiedad, pero no sé cómo especificar esto en nuestro formato de nombre de archivo, de ahí la expresión regular.
Gracias, Niki
No estoy seguro de cómo hacerlo en C # con WinForms, pero en C ++, lo que haría sería instalar un procedimiento de enlace personalizado y escuchar la notificación CDN_INCLUDEITEM. Luego, verifica cada nombre de archivo contra tu expresión regular. Consulte http://msdn.microsoft.com/en-us/library/ms646960(VS.85).aspx#_win32_Filters .
OpenFileDialog no es compatible con esto. Una alternativa es utilizar un control de terceros como FileView, que le permite filtrar elementos utilizando cualquier criterio que desee, como expresiones regulares.
Debería poder hacerlo con el siguiente filtro: Archivos de datos | * _1.xml
El OpenFileDialogEx descrito en este artículo de CodeProject es una extensión del estándar OpenFileDialog. La intención principal de esa extensión es modificar la visualización del diálogo, pero hay algunas campanas y silbatos adicionales. Por ejemplo, OFDEx agrega algunos eventos, para el cambio de archivo, cambio de carpeta, etc.
Alguien señaló que la notificación CDN_INCLUDEITEM parece que satisfaría el deseo de filtrar la lista de archivos mostrada en el cuadro de diálogo. Parece que sí, pero no es así. El CDN_INCLUDEITEM no hace lo que piensas o quieres.
De acuerdo con este artículo de MSDN Mag ,
Si crea su cuadro de diálogo con OFN_ENABLEINCLUDENOTIFY, Windows envía a su procedimiento hook una notificación CDN_INCLUDEITEM para cada elemento que agrega a la lista abierta. Si devuelve FALSE, Windows excluye el elemento. El problema es que Windows no le notifica archivos ordinarios, solo pseudoobjetos como extensiones de espacios de nombres. Cuando lee la documentación a través de una lupa, la impresión es perfectamente clara: "El cuadro de diálogo siempre incluye elementos que tienen los atributos SFGAO_FILESYSTEM y SFGAO_FILESYSANCESTOR, independientemente del valor devuelto por CDN_INCLUDEITEM". Aparentemente, los Redmondtonianos agregaron CDN_INCLUDEITEM para sus propios fines, que no incluía el filtrado de nombres de archivos comunes.
En otras palabras, en respuesta a CDN_INCLUDEITEM, no puede devolver FALSE para archivos regulares, para excluirlos del diálogo. En contraste con el documento que dice, la respuesta del CDN_INCLUDEITEM se ignora para los archivos normales, en mi experiencia, el CDN_INCLUDEITEM ni siquiera se envía para archivos regulares, al menos no en mi máquina Vista.
Entonces, ¿es posible excluir archivos de forma dinámica? Bueno, sí, en C ++; En respuesta al mensaje CDN_FOLDERCHANGED, puede obtener y configurar los contenidos de la CListCtrl que contiene los archivos. No he descubierto cómo configurar esta lista en C #.