2008-12-04 3 views
12

유니 코드 파일 이름으로 파일을 여는 C 라이브러리를 발견했습니다. 파일을 열기 전에 먼저 "\\? \"를 붙임으로써 파일 이름을 경로로 변환합니다. this msdn article 당 허용되는 최대 문자 수를 늘리는 것 이외의 다른 이유가 있습니까?Windows의 경우 "\\? \"파일 이름 접두어는 언제 사용해야합니까?

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

+0

길이 제한 외에도 제한없이 파일 이름에 마침표와 공백을 사용할 수 있습니다. 예를 들어, 원하는 경우 '..'라는 파일을 가질 수 있습니다. – Antimony

답변

9

네, 단지 그 목적을위한 것입니다. 그러나 MAX_PATH 길이 이상의 경로를 만들면 호환성 문제가 발생할 수 있습니다. 예를 들어 익스플로러 셸과 명령 프롬프트 (적어도 XP에서는 비스타에 대해 모른다)는이 길이 이상의 경로를 처리 할 수 ​​없으며 오류를 반환합니다.

1

저는 1995 년 이래로 Windows 코드를 작성해 왔지만이 접두사를 알고 있지만 사용법을 전혀 알지 못했습니다. 경로 길이를 MAX_PATH 이상으로 늘리는 것만이 유일한 이유 인 것처럼 보이며 나도 내 프로그램의 고객 중 누구도 내 지식에 그렇게하지 않았습니다.

3

"\\? \"은 경로를 UNC 경로로 지정하지 않는다는 점에 유의해야한다고 생각합니다. 두 번째로 UNC-스타일이라고 불렀을 때 더 정확했습니다. 경로. 하지만 그때도 유사점은 처음에는 두 개의 백 슬래시가 있어야만 발생합니다. UNC와는 아무런 관련이 없습니다. 이는 을 사용하여 더 많은 문자가 인 경우 "\\? \"접두사가있는 UNC 경로를 얻는 것이므로 백업됩니다.

나는 그 접두사를 사용하는 모든 이유가 있다고 생각합니다. 인용 한 기사에서 설명한대로 최대 길이 제한을 들어 올립니다. 또한 유니 코드 경로에만 적용됩니다. 비 유니 코드 경로는 해당 접두사를 사용하여 제한을 피할 수 없습니다.

접두어는 상대 경로에는 허용되지 않으며, 절대 경로에는 허용되지 않습니다. C 라이브러리가 해당 제한 사항을 준수하는지 다시 확인해야 할 수 있습니다.

5

이 방법을 사용하면 새 파일을 만들지 않고 다른 사람이 만든 기존 파일을 관리하는 것이 가장 좋습니다.

path_length > MAX_PATH으로 파일을 정기적으로받는 파일 서버를 관리했습니다. 사용자는 파일을 H:\myfile.txt으로 보았지만 실제로 서버에서는 H:\users\username\myfile.txt이었습니다. 따라서 사용자가 정확하게 MAX_PATH자를 가진 파일을 만든 경우 서버에 MAX_PATH+len("users\username")입니다.

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

또한 Mac 또는 Linux 컴퓨터에서 드라이브 (네트워크 또는 USB를 통해)를 공유하면 con, prn 또는 lpt1과 같은 이름의 파일을 찾을 수 있습니다. 다시 말하면, 접두어는 여러분과 여러분의 스크립트가 그 파일을 처리하도록합니다.

+1

바로 길이 검사 이외의 처리를 해제합니다. 최소 수정으로 시스템에 전달되었습니다. 즉, 경로 구분 기호를 나타내는 슬래시 나 현재 디렉토리를 나타내는 마침표 또는 상위 디렉토리를 나타내는 이중 점을 사용할 수 없습니다. "\\? \"접두어는 상대 경로와 함께 사용할 수 없기 때문에 상대 경로는 항상 총 MAX_PATH 문자로 제한됩니다. (/ 견적) –

3

"\\? \"접두사를 사용하면 더 긴 경로를 허용 할뿐만 아니라 "con"및 "aux"와 같은 파일 및 디렉토리 이름을 사용할 수도 있습니다. 일반적으로 Windows는 구형 DOS 장치로 해석합니다.