Aumentar el número de caracteres en el campo Nombre del archivo de diálogo de selección de archivo GetOpenFileName

StackOverflow https://stackoverflow.com/questions/361350

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

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top