안녕하세요? 질문이 있어서 글을 씁니다.
관련해서 검색을 꽤 많이 해 봤는데.. 답을 찾을 수가 없어서, 고수분들께 여쭈어 봅니다.
윈도우의 NTFS 파일 시스템은 파일의 경로와 이름에 3000여자를 사용할 수 있습니다.
문제는 윈도우 탐색기 등에서는 260여자를 넘는 경로명 혹은 파일에 접근할 수 없다는 것입니다.
이것은 윈32 API에 'MAX_PATH'라는 상수가 260으로 정의되어 있기 때문입니다.
물론, 이 'MAX_PATH' 상수를 변경하면 간단히 해결되는 문제입니다만..
MS는 하위호환성 때문에 이 상수값을 변경할 의지가 없어 보입니다.
그러던 중, 윈도우 10에서 긴 파일 문제에 대한 해답이라고 나온 것이 있습니다.
그룹정책편집기 혹은 레지스트리 값을 적절한 값으로 변경하면, 긴 파일 문제가 해결된다고 나옵니다.
(이것 관련해서는 다음 링크를 참고하면 됩니다: https://extrememanual.net/26666)
문제는 윈도우 10에서, 이런 설정을 하더라도, 윈도우 탐색기에서는 260자를 넘는 경로명에 접근할 수 없다는 데 있습니다.
윈도우 탐색기는 위 설정과 관계없이 제대로 동작하지 않습니다.
질문: 그렇다면 'Win32 긴 경로 사용' 이라는 옵션은 어떨 때 사용하는 걸까요? 어떤 것을 변경해 주는 옵션일까요?
제가 그래서, 간단히 테스트 환경을 만들어 봤습니다.
경로명 (338자): D:\Temp\1abcDEFghiJKLmnoPQRstuVWXyz_ABCdefGHIjklMNOpqrSTUvwxYZ_2abcDEFghiJKLmnoPQRstuVWXyz_ABCdefGHIjklMNOpqrSTUvwxYZ_3abcDEFghiJKLmnoPQRstuVWXyz_ABCdefGHIjklMNOpqrSTUvwxYZ_\4abcDEFghiJKLmnoPQRstuVWXyz_ABCdefGHIjklMNOpqrSTUvwxYZ_5abcDEFghiJKLmnoPQRstuVWXyz_ABCdefGHIjklMNOpqrSTUvwxYZ_6abcDEFghiJKLmnoPQRstuVWXyz_ABCdefGHIjklMNOpqrSTUvwxYZ_
파일명: (9자): text1.txt
탐색기에서는 위 폴더의 파일에 접근이 불가하니, 명령 프롬프트에서 다음과 같은 명령을 내려 봤습니다.
"C:\Windows\System32\notepad.exe" "D:\Temp\1abcDEFghiJKLmnoPQRstuVWXyz_ABCdefGHIjklMNOpqrSTUvwxYZ_2abcDEFghiJKLmnoPQRstuVWXyz_ABCdefGHIjklMNOpqrSTUvwxYZ_3abcDEFghiJKLmnoPQRstuVWXyz_ABCdefGHIjklMNOpqrSTUvwxYZ_\4abcDEFghiJKLmnoPQRstuVWXyz_ABCdefGHIjklMNOpqrSTUvwxYZ_5abcDEFghiJKLmnoPQRstuVWXyz_ABCdefGHIjklMNOpqrSTUvwxYZ_6abcDEFghiJKLmnoPQRstuVWXyz_ABCdefGHIjklMNOpqrSTUvwxYZ_\test1.txt"
윈도우 8.1: 못 엽니다.
윈도우 10, 설정 이전: 엽니다.
윈도우 10, 설정 이후: 엽니다.
(여기에서 '설정'이라는 것은 'Win32 긴 경로 사용'을 의미합니다.)
그런데, 검색을 좀 더 해 보니.. 경로명 앞에 \\?\ 를 붙이면 긴 경로명을 인식할 수 있다고도 하네요.
그래서 다음과 같은 명령을 내려 봤습니다. (위의 명령 대비, 달라진 것은 굵게 표시했습니다.)
"C:\Windows\System32\notepad.exe" "\\?\D:\Temp\1abcDEFghiJKLmnoPQRstuVWXyz_ABCdefGHIjklMNOpqrSTUvwxYZ_2abcDEFghiJKLmnoPQRstuVWXyz_ABCdefGHIjklMNOpqrSTUvwxYZ_3abcDEFghiJKLmnoPQRstuVWXyz_ABCdefGHIjklMNOpqrSTUvwxYZ_\4abcDEFghiJKLmnoPQRstuVWXyz_ABCdefGHIjklMNOpqrSTUvwxYZ_5abcDEFghiJKLmnoPQRstuVWXyz_ABCdefGHIjklMNOpqrSTUvwxYZ_6abcDEFghiJKLmnoPQRstuVWXyz_ABCdefGHIjklMNOpqrSTUvwxYZ_\test1.txt"
결과는 위의 것과 같습니다.
윈도우 8.1: 못 엽니다.
윈도우 10, 설정 이전: 엽니다.
윈도우 10, 설정 이후: 엽니다.
자.. 그렇다면, 'Win32 긴 경로 사용'은.. 현재로서는 사용할 필요성을 저는 못 느끼겠습니다.
질문: 그렇다면 'Win32 긴 경로 사용' 이라는 옵션은 어떨 때 사용하는 걸까요? 어떤 것을 변경해 주는 옵션일까요?
예를 들어서, '윈도우 10 설정 이전'에는 \\?\ 을 붙여야만 동작하지만, '윈도우 10 설정 이후'에는 \\?\ 을 붙이지 않아도 동작한다면, 이 옵션의 의미가 있다고 보입니다.
그러나, 테스트 결과는 \\?\과 관계 없이, 윈도우 8.1은 무조건 긴 경로명을 열지 못하고, 윈도우 10은 무조건 긴 경로명을 열 수 있습니다. 물론, 'Win32 긴 경로 사용' 옵션과 관계 없이 말이지요.
'Win32 긴 경로 사용' 옵션은 도대체 무엇일까요?
질문이 좀 복잡하네요.
고수 분들의 도움 부탁드립니다~
저는 파일질라 FTP로 하고 있습니다..
FTP 서버 띄우고 로걸 FTP로 접속하여 합니다..
바보같은 윈도우죠..
가만 살펴보니, 'Win32 긴 경로 사용'은 프로그래밍적으로 접근할 때 사용하는 옵션인 듯 합니다.
그러니까 일반 사용자용이 아닌 것이죠..
그룹정책 편집기에도 '프로세스에 접근할 수 있다'라고 하는 것으로 봐선, 더 그래보이긴 합니다.. ㅠ.ㅠ
또 한 가지 배워 갑니다. ^^
그래서 해당 함수를 사용하는 프로그램에서도 긴 경로명을 지원할 수 있게 만들어주지만, 당연히 호환성 문제가 생길 수도 있고 프로그람 내에서 직접 MAX_PATH를 보거나 하는 경우에도 의미가 없습니다.
탐색기의 경우에는 해당 옵션을 키면 일부 조작이 영향을 받는 걸로 알고 있습니다.
MAX_PATH를 초과하는 파일명을 짧게 바꾸는 것 같은게 옵션 유무에 따라서 가능하거나 안하거나 할 겁니다.
그래도 근본적으로는 해결이 안 되기 때문에 긴 경로명을 피하거나 다른 파일 관리 프로그램을 쓰는 수 밖에 없습니다.
간단하게는 7ZIP 내장 탐색기가 좋죠. SMB도 경로명 제한이 없어서 그걸 쓰는 경우는 본 것 같은데.. FTP를 쓰시는 분은 처음 보네요.
아마데우스님 윈도우10이 최신 업데이트면 윈도우가 기본적으로 지원해서 그럴수도 있을거 같습니다.