Aumentare il numero di caratteri nel campo Nome file della finestra di selezione dei file GetOpenFileName

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

Domanda

La nostra applicazione permette di file multipli da selezionare in una finestra di selezione file che viene visualizzato tramite la funzione GetOpenFileName (questa domanda vale anche per la gente utilizzando CFileDialog, ecc ...)

Sembra che ci sia un limite al numero di caratteri che possono essere digitati nel campo nome del file. (259 sembra essere il numero magico - non so perché)

Abbiamo provato a cambiare i seguenti membri del OPENFILENAME struttura :

lpstrFile - punto alla nostra tampone, una dimensione di 4K byte nMaxFile - impostato sulla dimensione di lpstrFile (stiamo compilando ANSI, quindi questo è effettivamente 4000

Ma questi valori sembrano non aumentare la larghezza di ingresso del campo di nome di file nella finestra di dialogo.

Ho intenzione di sperimentare con l'invio di un messaggio EM_SETLIMITTEXT al controllo, ma volevo sapere se qualcun altro ha una soluzione.

Modifica - risolto questo me stesso: soluzione non posso accettare la mia risposta, ma qui è per i posteri. Se qualcun altro ha una soluzione migliore, si prega di postare -. O si sentono liberi di mod la mia soluzione ricercatori in modo future troveranno in alto

È stato utile?

Soluzione

Risulta che il controllo di modifica (almeno nel mio ambiente di sviluppo) è una casella combinata, quindi EM_SETLIMITTEXT non è appropriato.

Invece, ho rintracciato la casella combinata utilizzando GetDlgCtrl sul padre della finestra di apertura file (faccio questo nel OnInitDialog gestore), gettarlo ai CComboBox*, quindi chiamare LimitText() per impostare la limite.

Questo potrebbe essere fatto anche con l'invio di un messaggio CB_LIMITTEXT al controllo per quelli di voi che non stanno lavorando con CFileDialog. Il valore appropriato è qui molto probabilmente il OPENFIILENAME.nMaxFile valore che viene passato in.

Altri suggerimenti

Denominazione di un file o directory su MSDN :

  

Nel API di Windows (con alcune eccezioni discusse nei paragrafi seguenti), la lunghezza massima per un percorso è MAX_PATH, che è definito come 260 caratteri.

Anche se si potrebbe costringere stringhe più lunghe fuori dalla finestra di dialogo, si può incorrere in problemi lungo la linea quando si utilizzano le API che sono state codificate contro "\\?\".

La documentazione vanno a dire:

  

L'API di Windows ha molte funzioni   che sono anche le versioni Unicode a   consentire un percorso esteso lunghezza per un   massima lunghezza di percorso totale di 32.767   personaggi. Questo tipo di percorso è   composta da componenti separati da   barre rovesciate, ciascuno fino al valore   restituito nel   parametro lpMaximumComponentLength di   la funzione GetVolumeInformation. Per   specificare un percorso esteso di lunghezza, utilizzare   il "\\?\D:\<very long path>" prefisso. Per esempio,   <. (Il   caratteri > <=> sono utilizzati qui per   chiarezza visiva e non può essere parte di un   valida stringa di percorso.)

Credo che questo sia un limite rigido che non può essere ignorato. L'unica volta che dovrebbe importare è quando si desidera selezionare più di un file, dal momento che il limite è sufficiente per la lunghezza massima nome del file.

Ho aggiunto un pulsante per queste finestre di dialogo per l'apertura di tutti i file in una cartella "Tutti i file"; questa è l'unica soluzione che ho trovato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top