getOpenFilename 파일 선택 대화 상자의 파일 이름 필드에서 문자 수 증가

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

문제

당사의 앱은 getOpenFilename 함수를 통해 표시되는 파일 선택 대화 상자에서 여러 파일을 선택할 수 있습니다 (이 질문은 cfiledialog 등을 사용하는 사람들에게도 적용됩니다 ...)

파일 이름 필드에 입력 할 수있는 문자 수에는 한계가있는 것으로 보입니다 (259는 마법 번호 인 것 같습니다. 이유는 확실하지 않습니다).

우리는 다음 멤버를 변경하려고 시도했습니다 OpenFileName 구조:

LPSTRFILE- 4K 바이트 크기의 크기의 자체 버퍼를 가리키고 LPSTRFILE 크기로 설정되어 있습니다 (우리는 ANSI를 컴파일하고 있으므로 효과적으로 4000입니다.

그러나 이러한 값은 대화 상자에서 파일 이름 필드의 입력 너비를 증가시키지 않는 것으로 보입니다.

EM_SETLIMITTEXT 메시지를 컨트롤에 보내는 것을 실험하려고하지만 다른 사람이 솔루션을 가지고 있는지 알고 싶었습니다.

편집 - 이것을 직접 해결했습니다. 해결책 나는 내 자신의 대답을 받아 들일 수 없지만 여기서는 후손입니다. 다른 사람이 더 나은 솔루션을 가지고 있다면,이를 게시하거나 미래의 검색자가 맨 위에서 찾을 수 있도록 내 솔루션을 자유롭게 수정하십시오.

도움이 되었습니까?

해결책

편집 컨트롤 (적어도 내 개발 환경에서)은 콤보 상자라는 것이 밝혀졌습니다. EM_SETLIMITTEXT 적절하지 않습니다.

대신, 나는 콤보 박스를 사용하여 추적했다 GetDlgCtrl 파일 열린 대화 상자의 부모에게 OnInitDialog 핸들러), 캐스트 CComboBox*, 그런 다음 전화하십시오 LimitText() 한도를 설정합니다.

이것은 또한 a를 보내면 수행 할 수 있습니다 CB_LIMITTEXT 함께 일하지 않는 사람들을위한 통제에 대한 메시지 CFileDialog. 여기서 적절한 값은 가장 가능성이 높습니다 OPENFIILENAME.nMaxFile 통과되는 가치.

다른 팁

에서 MSDN에서 파일 또는 디렉토리 이름 지정:

Windows API에서 (다음 단락에서 논의 된 일부 예외 포함) 경로의 최대 길이는 다음과 같습니다. MAX_PATH, 260 자로 정의됩니다.

대화 상자에서 더 긴 문자열을 강요 할 수 있더라도 코딩 된 API를 사용할 때 라인 아래로 문제가 발생할 수 있습니다. MAX_PATH.

문서는 계속해서 말합니다.

Windows API에는 최대 총 경로 길이 32,767 문자의 확장 길이 경로를 허용하는 유니 코드 버전이있는 많은 기능이 있습니다. 이 유형의 경로는 백 슬래시로 분리 된 구성 요소로 구성되며, 각각 GetVolumeInformation 함수의 lpmaxumubumponentlength 매개 변수에서 반환 된 값까지. 확장 길이 경로를 지정하려면 "\\?\" 접두사. 예를 들어, "\\?\D:\<very long path>". (캐릭터 < > 시각적 명확성을 위해 여기에서 사용되며 유효한 경로 문자열의 일부가 될 수 없습니다.)

나는 이것이 우회 할 수없는 어려운 한계라고 생각합니다. 중요한 시간은 한계가 최대 파일 이름 길이에 충분하기 때문에 둘 이상의 파일을 선택하려는 경우입니다.

폴더에서 모든 파일을 열기 위해이 대화 상자에 "모든 파일"버튼을 추가했습니다. 그것이 내가 찾은 유일한 해결 방법입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top