문제

유니코드 파일 이름이 지정된 파일을 열기 위한 C 라이브러리를 발견했습니다.파일을 열기 전에 먼저 "\\?\"를 추가하여 파일 이름을 경로로 변환합니다.경로에 허용되는 최대 문자 수를 늘리는 것 외에 이렇게 할 이유가 있습니까? 이 msdn 기사?

이러한 "\\?\" 경로에는 Windows API 및 표준 라이브러리의 유니코드 버전이 필요한 것 같습니다.

도움이 되었습니까?

해결책

예, 단지 그 목적을 위한 것입니다.그러나 MAX_PATH 길이를 초과하는 경로를 생성하기로 결정하면 호환성 문제가 발생할 수 있습니다.예를 들어, 탐색기 셸과 명령 프롬프트(적어도 XP에서는 Vista에 대해서는 잘 모르겠습니다)는 해당 길이를 초과하는 경로를 처리할 수 없으며 오류를 반환합니다.

다른 팁

이 방법의 가장 좋은 용도는 새 파일을 만드는 것이 아니라 다른 사람이 만든 기존 파일을 관리하는 것입니다.

나는 정기적으로 파일을 가져오는 파일 서버를 관리했습니다. path_length > MAX_PATH.알다시피, 사용자는 파일을 다음과 같이 보았습니다. H:\myfile.txt, 하지만 서버에서는 실제로 H:\users\username\myfile.txt.따라서 사용자가 정확히 다음과 같은 파일을 생성한 경우 MAX_PATH 캐릭터, 서버에서는 그랬어요 MAX_PATH+len("users\username").

(MAX_PATH 문자로 파일을 생성하는 것은 그리 드문 일이 아닙니다. Internet Explorer에서 웹 페이지를 저장할 때 페이지 제목을 파일 이름으로 사용하기 때문에 일부 페이지에서는 상당히 길 수 있습니다.)

또한 Mac 또는 Linux 시스템과 네트워크 또는 USB를 통해 드라이브를 공유하면 con, prn 또는 lpt1과 같은 이름의 파일을 찾을 수 있습니다.그리고 다시 말하지만, 접두어를 사용하면 사용자와 스크립트가 해당 파일을 처리할 수 있습니다.

가장 먼저 주목해야 할 것은 "? "는 경로를 UNC 경로로 만들지 않는다는 것입니다. 당신은 그것을 UNC라고 불렀을 때 두 번째로 더 정확했습니다.스타일 길. 그러나 그럼에도 불구하고, 유사성은 처음에 두 개의 백 슬래시를 갖는 것만으로도 발생합니다. 정말 UNC와는 아무 관련이 없습니다. 그것은 당신이 사용해야한다는 사실에 의해 백업됩니다. 더 나아가 "? "접두사로 UNC 경로를 얻는 문자.

나는 당신이 그 접두사를 사용해야 할 모든 이유가 있다고 생각합니다. 인용 한 기사에 설명 된대로 최대 길이 한계를 높이십시오. 그리고 그것은 유니 코드 경로에만 적용됩니다. 비공개 경로는 해당 접두사를 사용하여 한계를 피할 수 없습니다.

주목해야 할 한 가지는 접두사가 상대 경로에 대해서만 허용되지 않는다는 것입니다. C 라이브러리가 그 제한을 존중하는 것을 다시 확인할 수 있습니다.

더 긴 경로를 허용하는 것 외에도 "? "접두사를 사용하면 "Con"및 "Aux"와 같은 파일 및 디렉토리 이름을 사용할 수 있습니다. 일반적으로 Windows는 그것들을 구식 DOS 장치로 해석합니다.

나는 1995 년부터 Windows 코드를 작성해 왔으며, 그 접두사를 알고 있지만 그것을 사용할 이유를 찾지 못했습니다. 경로 길이를 너머로 증가시킵니다 MAX_PATH 그것의 유일한 이유 인 것 같습니다. 저와 제 프로그램의 고객도 그렇게 한 적이 없습니다.

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