Aumentar el número de caracteres en el campo Nombre del archivo de diálogo de selección de archivo GetOpenFileName
-
21-08-2019 - |
Pregunta
Nuestra aplicación permite que múltiples archivos sean seleccionadas en un diálogo de selección de archivo que se muestra a través de la función GetOpenFileName (esta cuestión también se aplica a la gente usando CFileDialog, etc ...)
Parece que hay un límite para el número de caracteres que se pueden escribir en el campo de nombre de archivo. (259 parece ser el número mágico - no sé por qué)
Hemos intentado cambiar los siguientes miembros de la OPENFILENAME estructura :
lpstrFile - punto a nuestro propio buffer, dimensionado en 4 Kbytes nMaxFile - establecido en el tamaño de lpstrFile (estamos recopilando ANSI, por lo que este es efectivamente 4000
Sin embargo, estos valores no parecen aumentar el ancho de entrada del campo de nombre de archivo en el cuadro de diálogo.
Voy a experimentar con el envío de un mensaje EM_SETLIMITTEXT con el control, pero quería saber si alguien tiene una solución.
EDITAR - resuelto esto mismo: solución no puedo aceptar mi propia respuesta, pero aquí está para la posteridad. Si alguien tiene una mejor solución, por favor, publicarlo -. O no dude en mod mi solución para que los futuros buscadores encontrarán en la parte superior
Solución
Resulta que el control de edición (Al menos en mi entorno de desarrollo) es un cuadro combinado, por lo EM_SETLIMITTEXT
no es apropiado.
En su lugar, seguido por el cuadro combinado utilizando GetDlgCtrl
en el padre del diálogo de apertura de archivo (hago esto en el OnInitDialog
manejador), echarlo a CComboBox*
, a continuación, llamar LimitText()
para establecer el límite.
Esto también podría hacerse mediante el envío de un mensaje al CB_LIMITTEXT
de control para aquellos de ustedes que no están trabajando con CFileDialog
. El valor apropiado en este caso es más probable que el OPENFIILENAME.nMaxFile
valor que se pasa en.
Otros consejos
El nombramiento de un archivo o directorio en MSDN :
En la API de Windows (con algunas excepciones discutidas en los párrafos siguientes), la longitud máxima para un camino es
MAX_PATH
, que se define como 260 caracteres.
Incluso si se pudiera obligar a las cadenas de más del diálogo, es posible que encuentre problemas en el momento cuando se utilizan las API que han sido codificados en contra "\\?\"
.
Los documentos van a decir:
La API de Windows tiene muchas funciones que también tienen versiones Unicode a permitir un camino de longitud extendida para una longitud de la trayectoria total máxima de 32.767 caracteres. Este tipo de camino es compuesto de componentes separados por barras invertidas, cada uno hasta el valor devuelto en la parámetro lpMaximumComponentLength de la función GetVolumeInformation. A especificar una ruta de longitud extendida, utilizar la
"\\?\D:\<very long path>"
prefijo. Por ejemplo,<
. (Los personajes>
<=> se utilizan aquí para la claridad visual y no puede ser parte de una cadena de ruta válida.)
Creo que esto es un límite duro que no puede ser excluida. La única vez que debe importar es cuando se desea seleccionar más de un archivo, ya que el límite es suficiente para que la longitud máxima del nombre del archivo.
He añadido un botón para estos cuadros de diálogo para la apertura de todos los archivos en una carpeta "Todos los archivos"; esa es la única solución que he encontrado.