NTFS의 최대 파일 이름 길이 (Windows XP 및 Windows Vista)?


261

업로드 된 파일의 파일 이름을 보유 할 데이터베이스 테이블을 설계하고 있습니다. Windows XP 또는 Vista에서 사용되는 NTFS 파일 이름의 최대 길이는 얼마입니까?


83
나는 간단한 질문이어야 할 것에 대한 많은 다른 답변을 본 적이 없다. 199, 255, 256, 257, 260, '약 30,000', '약 30,000'및 '종속' 물론, 예선이 있지만 모두 옳은 것은 아닙니다.
무조건

7
스토리지 서버에 문제를 일으킴에 따라 회사 사용자가이 항목에 도달하지 못하도록 애플리케이션을 빌드해야했기 때문에이 점을 알고 있습니다.
RobertPitt

2
@RobertPitt. 거기에 뭔가 빠졌습니다. MSDN에서 인용 : "경로의 최대 길이는 260 자로 정의 MAX_PATH입니다"
마이클 Olesen은

7
@ Michael9000. RobertPitt는 경로 제한이 아닌 파일 이름 제한 (이 질문에 관한 것)을 인용한다고 생각합니다.
gdw2

7
NTFS는 MAX_PATH로 제한되지
않으며

답변:


286

파일 이름의 개별 구성 요소 (예 : 경로를 따라 각 하위 디렉토리 및 최종 파일 이름)는 255 자로 제한되며 총 경로 길이는 약 32,000 자로 제한됩니다.

그러나 Windows에서는 MAX_PATH값을 초과 할 수 없습니다 (파일의 경우 259 자, 폴더의 경우 248 자). 보다자세한 내용은 http://msdn.microsoft.com/en-us/library/aa365247.aspx 를 참조하십시오.


4
다음은이 답변을 확인하는 몇 가지 사실입니다 (Windows는 일반적으로 260 자로 제한됨). msdn.microsoft.com/en-us/library/…blogs.msdn.com/b/bclteam/archive/2007/02/13
Michael Olesen

62
사용자가 제공 한 링크에 따라 NTFS에 대해서는 올바른 것이 아니며 Windows에 대해서는 올바르지 않습니다. "Windows API (일부 단락에서 설명하는 일부 예외)에서 경로의 최대 길이는 MAX_PATH이며 260 자로 정의됩니다." 전체 경로는 259 자로 제한 모든 실제적인 목적을 위해 (널 (NULL) 종료 허용)된다.
Lawrence Dol

9
Windows API 파일 메서드의 "유니 코드 버전"을 사용하는 경우 경로 이름 앞에 "\\? \"접두사가 올 바르면 최대 32767을 얻을 수 있습니까?
rogerdpack

6
@rogerdpack : 전체 경로는 가능하지만 각 개별 구성 요소 (하위 폴더 / 최종 파일)에는 255 utf-16 코드 포인트 제한이 있습니다. 게다가, 일반적인 소프트웨어는 MAX_PATH를 기대합니다. :)
snemarch

5
윈도우 10 (버전 1607 - 주년 기념 업데이트)에서 및 Windows Server 2016 당신은 그룹 정책 항목 컴퓨터 구성에서 NTFS 긴 경로를 가능하게 재정 의하여 MAX_PATH 문제를 무시하는 옵션이 솔기 -> 관리 템플릿 -> 시스템 -> 파일 시스템 :
Steven Mark Ford

28

257 자입니다. 정확히 말하면 : NTFS 자체는 최대 파일 이름 길이 (수 천자 (약 30'000 개))를 부과합니다. 그러나 Windows는 Path + Filename에 260 최대 길이를 부과합니다. drive + folder는 3 자 이상을 차지하므로 257로 끝납니다.


21
잘못됨-NUL 터미네이터는 MAX_PATH의 일부이므로 최대 256 자 (경로의 개별 구성 요소 제한으로 인해 만들 수 없음) 인 256 자까지 허용됩니다.
snemarch

4
"개별 구성 요소 제한이 255이므로 만들 수 없습니다"잘못되었습니다. 여기서는 최대 개별 경로 구성 요소 길이가 아니라 최대 경로 길이에 대해 이야기하고 있습니다. 또한 "API를 사용하여 디렉토리를 만들 때 지정된 경로는 너무 길어서 8.3 파일 이름을 추가 할 수 없습니다 (즉, 디렉토리 이름은 MAX_PATH-12를 초과 할 수 없음)"
Ludovic Kuty

256 문자가 널 (null)이라는 가정하에 하위 레벨 API가 파일 이름 256 문자를 작성할 수 있지만 파일이 원시 애플리케이션에 액세스 할 수 없게 (숨겨 짐) 일반적으로 유용하지 않기 때문에이 논쟁은 단지 제기됩니다.
콘래드 B

1
@LudovicKuty : 실제로 OP는 경로 길이가 아닌 파일 이름 길이 제한 에 대해 이야기했습니다 (예, 원래 개정판에서도 확인했습니다). 또한 OS, 특정 하위 시스템 또는 API 또는 프레임 워크의 제한이 아닌 NTFS 제한을 매우 구체적으로 언급했습니다.
0xC0000022L

@ 0xC0000022L 그렇습니다. 나는 OP 질문에서 그것을 잘못 읽고 파일 이름 길이와 경로 길이에 대해 언급하는 의견에 집중했습니다.
Ludovic Kuty

27

긴 파일 이름으로 파일을 저장하려고 할 때 프레임 워크 4.5에서 "처리되지 않은 예외"에 표시되는 내용은 다음과 같습니다.

지정된 경로, 파일 이름 또는 둘 모두가 너무 깁니다. 완전한 파일 이름은 260 자 미만이어야 하고 디렉토리 이름은 248 자 미만이어야 합니다.

스크린 샷


16

199 Windows XP NTFS에서 방금 확인했습니다.

이것은 이론이 아니라 단지 랩톱에서 시도하는 것입니다. 완화 효과가있을 수는 있지만 물리적으로 크게 만들 수는 없습니다.

이것을 제한하는 다른 설정이 있습니까? 직접 해보십시오.


1
XP의 내 버전에서이를 확인했습니다. 얼마나 큰 고통입니까
Julian Young

나는 낄낄 거림을 위해 Windows XP에서도 똑같이했습니다. 200 자로 제한했습니다. 그런 다음 방금 255 번 파일을 만들고 w삭제하고 Windows 7 x64에서 동일한 이름의 폴더를 만들었습니다. 이제 문제는 여기서 제한 요소가 무엇입니까? NTFS 버전, OS 또는 하위 시스템 또는 XP의 Win32 API?
0xC0000022L

200 자 제한은 탐색기에있는 것 같습니다. 다른 프로그램은 더 긴 파일 이름을 만들 수 있습니다. 이것은 아마도 사용자를 자신으로부터 보호하기위한 의도적 인 제한 일 것입니다. :-)
avl_sweden

13

MSDN 에 따르면 260 자입니다. 그것은 포함"<NUL>" 실제 길이가 259하므로, 보이지 -THE 종료 널 문자.

그러나 기사를 읽으십시오. 조금 더 복잡합니다.


1
실제로 참조 된 MSDN 기사에 따르면 경로 는 260 자로 제한되지만 파일 이름의 길이는 파일 시스템에 따라 다르지만 일반적으로 255 바이트입니다. 그러나 "Windows API 함수의 유니 코드 버전"을 사용하여 경로 제한을 32767 바이트로 높일 수는 있지만 \\?\ 런타임에 필요한 접두사를 내부적으로 지정하지 않은 길이로 확장하여 창에 의해 제한이 줄어 듭니다 . 이 확장 후에는 경로가 32767 바이트 미만이어야합니다.
Mikko Rantalainen

13

NTFS의 길이는 255입니다. NameLengthNTFS $Filename속성 의 필드는 오프셋이없는 바이트입니다. 이 범위는 0-255입니다.

파일 이름 iself는 다른 "네임 스페이스"에있을 수 있습니다. 지금까지 POSIX, WIN32, DOS 및 (WIN32DOS-파일 이름이 기본적으로 DOS 이름 일 수있는 경우)이 있습니다. (문자열은 길이 있으므로 \ 0을 포함 할 있지만 문제가 발생하며 위의 네임 스페이스에 없습니다.)

따라서 파일 또는 디렉토리의 이름은 최대 255 자입니다. Windows에서 전체 경로를 지정할 때이 경로를 \\? \접두사 로 지정 하거나 UNC 경로에 \\? \ UNC \ server \ share를 사용 하여이 경로를 확장 길이 (~ 32k 자)로 표시해야합니다. . 경로가 더 길면 작업 디렉토리를 길을 따라 설정해야합니다 (프로세스 전체 설정으로 인한 부작용).




4

위의 승인 된 답변에 이것을 추가하고 있습니다.

명확하게 말하면 사람들이 255-260 자라고 생각하는 이유는 이것이 Windows 탐색기가 지원하는 전부이기 때문입니다. 파일 이름보다 긴 파일 복사와 같은 작업을 수행하면 오류가 발생합니다. 그러나 프로그램은 훨씬 더 긴 파일 이름을 읽고 쓸 수 있습니다 (이것은 Explorer가 처음에 불평하는 길이에 도달하는 방식입니다). 이와 같은 상황에서 Microsoft의 "권장 수정 사항"은 파일을 작성한 원래 프로그램에서 파일을 열고 이름을 바꾸는 것입니다.


vim을 사용하여 명령 줄에서 260 + 문자를 초과하는 폴더 계층 아래에 ​​파일을 저장하려고했지만 실패했습니다.
panny

@panny : Vim의 저자들은 긴 경로 이름을 구현하는 데주의를 기울이지 않았습니다. 이는 Windows가 Win32 하위 시스템을 비난하거나 운영 체제가 요구 한 NTFS의 파일 이름 길이 제한 과 관련이 없습니다 .
0xC0000022L

3

새로운 Windows SDK 설명서 (8.0)에 따르면 새로운 경로 제한이 제공되는 것 같습니다. 새로운 경로 처리 함수 세트 와 다음과 같은 PATHCCH_MAX_CCH 정의가 있습니다.

// max # of characters we support using the "\\?\" syntax
// (0x7FFF + 1 for NULL terminator)
#define PATHCCH_MAX_CCH             0x8000

3
그러나 Windows 8 탐색기 (필자의 경우 Win8.1 Preview)는이 제한으로 작동하지 않으며 259 자보다 긴 경로를 허용하지 않습니다.
Cplusminus_is_coming

3

공식 문서 의이 부분은 NTFS, exFAT 및 FAT32 의 경우 255 유니 코드 문자 , UDF의 경우 127 유니 코드 또는 254 ASCII 문자 임을 분명히 밝힙니다 .

그 외에도 최대 경로 이름 길이는 항상 32,760 유니 코드 문자이며 각 경로 구성 요소는 255자를 초과하지 않습니다.


충분히 가까이 허용 된 답변에 대한 의견에서 지적한 것처럼 32767 WCHAR요소입니다. 아니요, "유니 코드 문자" 가 아닙니다 (유니 코드 용어 확인 : 코드 포인트, 문자 등 ...!).
0xC0000022L


-2

238! 다음 bat 스크립트를 사용하여 Win7 32 비트에서 확인했습니다.

set "fname="
for /l %%i in (1, 1, 27) do @call :setname
@echo %fname%
for /l %%i in (1, 1, 100) do @call :check
goto :EOF
:setname
set "fname=%fname%_123456789"
goto :EOF
:check
set "fname=%fname:~0,-1%"
@echo xx>%fname%
if not exist %fname% goto :eof
dir /b
pause
goto :EOF

긴 경로를 올바르게 처리하는 프로그램으로 Windows 7에서 확인했습니다. 각 개별 경로 세그먼트는 255자를 사용할 수 있습니다 (사용했습니다 w). 그래서 지금 무엇?
0xC0000022L

-2

실제로는 256입니다. 파일 시스템 기능 비교, 한계를 참조하십시오 .

http://fixunix.com/microsoft-windows/30758-windows-xp-file-name-length-limit.html에 게시물을 반복하려면

"FAT32가 아닌 NTFS에 대해 이야기 할 때"경로 + 파일의 경우 255 자 "는 파일 시스템 자체가 아니라 탐색기의 제한 사항입니다. NTFS는 각 구성 요소가 최대 255자인 최대 32,000 개의 유니 코드 문자를 지원합니다.

Explorer 및 Windows API는 경로에 대해 드라이브 문자, 콜론, 슬래시 분리 및 종료 널 문자를 포함하여 260 자로 제한합니다. \\"로 시작하면 Windows에서 더 긴 경로를 읽을 수 있습니다.

위의 게시물을 읽으면 다섯 번째 확신 할 수있는 것을 볼 수 있습니다. 적어도 한 명의 컴퓨터 사용자를 찾는 것!


4
아니요-255입니다. NTFS $ Filename 특성의 NameLength 필드는 오프셋이없는 바이트입니다. 이것은 0-255의 범위를 산출합니다
Dominik Weber

-2

224 보다 긴 WS 2012 탐색기에서 이름 + 마침표 + 내선이있는 파일을 만들 수 없습니다 자를 . 메신저를 쏘지 마라!

동일한 서버의 CMD에서 235 자를 초과하는 문자 이름을 만들 수 없습니다 .

시스템이 지정된 경로를 찾을 수 없습니다.

탐색기에서 만든 224 자의 이름을 가진 파일은 Notepad ++에서 열 수 없습니다. 대신 새 파일이 나타납니다.


The system cannot find the path specified.와 동일하지 않습니다 The specified path, file name, or both are too long.. 나는 당신이 오타 나 무언가를 가지고 있다고 생각합니다. 존재하지 않는 경로에 파일을 만들려고하거나 존재하지 않는 방향으로 이동하려는 경우 해당 메시지가 나타납니다.
Matthias Burger
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.