업로드 된 파일의 파일 이름을 보유 할 데이터베이스 테이블을 설계하고 있습니다. Windows XP 또는 Vista에서 사용되는 NTFS 파일 이름의 최대 길이는 얼마입니까?
업로드 된 파일의 파일 이름을 보유 할 데이터베이스 테이블을 설계하고 있습니다. Windows XP 또는 Vista에서 사용되는 NTFS 파일 이름의 최대 길이는 얼마입니까?
답변:
파일 이름의 개별 구성 요소 (예 : 경로를 따라 각 하위 디렉토리 및 최종 파일 이름)는 255 자로 제한되며 총 경로 길이는 약 32,000 자로 제한됩니다.
그러나 Windows에서는 MAX_PATH
값을 초과 할 수 없습니다 (파일의 경우 259 자, 폴더의 경우 248 자). 보다자세한 내용은 http://msdn.microsoft.com/en-us/library/aa365247.aspx 를 참조하십시오.
257 자입니다. 정확히 말하면 : NTFS 자체는 최대 파일 이름 길이 (수 천자 (약 30'000 개))를 부과합니다. 그러나 Windows는 Path + Filename에 260 최대 길이를 부과합니다. drive + folder는 3 자 이상을 차지하므로 257로 끝납니다.
긴 파일 이름으로 파일을 저장하려고 할 때 프레임 워크 4.5에서 "처리되지 않은 예외"에 표시되는 내용은 다음과 같습니다.
지정된 경로, 파일 이름 또는 둘 모두가 너무 깁니다. 완전한 파일 이름은 260 자 미만이어야 하고 디렉토리 이름은 248 자 미만이어야 합니다.
199 Windows XP NTFS에서 방금 확인했습니다.
이것은 이론이 아니라 단지 랩톱에서 시도하는 것입니다. 완화 효과가있을 수는 있지만 물리적으로 크게 만들 수는 없습니다.
이것을 제한하는 다른 설정이 있습니까? 직접 해보십시오.
w
삭제하고 Windows 7 x64에서 동일한 이름의 폴더를 만들었습니다. 이제 문제는 여기서 제한 요소가 무엇입니까? NTFS 버전, OS 또는 하위 시스템 또는 XP의 Win32 API?
MSDN 에 따르면 260 자입니다. 그것은 포함"<NUL>"
실제 길이가 259하므로, 보이지 -THE 종료 널 문자.
그러나 기사를 읽으십시오. 조금 더 복잡합니다.
\\?\
런타임에 필요한 접두사를 내부적으로 지정하지 않은 길이로 확장하여 창에 의해 제한이 줄어 듭니다 . 이 확장 후에는 경로가 32767 바이트 미만이어야합니다.
NTFS의 길이는 255입니다. NameLength
NTFS $Filename
속성 의 필드는 오프셋이없는 바이트입니다. 이 범위는 0-255입니다.
파일 이름 iself는 다른 "네임 스페이스"에있을 수 있습니다. 지금까지 POSIX, WIN32, DOS 및 (WIN32DOS-파일 이름이 기본적으로 DOS 이름 일 수있는 경우)이 있습니다. (문자열은 길이 가 있으므로 \ 0을 포함 할 수 있지만 문제가 발생하며 위의 네임 스페이스에 없습니다.)
따라서 파일 또는 디렉토리의 이름은 최대 255 자입니다. Windows에서 전체 경로를 지정할 때이 경로를 \\? \ 로 접두사 로 지정 하거나 UNC 경로에 \\? \ UNC \ server \ share를 사용 하여이 경로를 확장 길이 (~ 32k 자)로 표시해야합니다. . 경로가 더 길면 작업 디렉토리를 길을 따라 설정해야합니다 (프로세스 전체 설정으로 인한 부작용).
위의 승인 된 답변에 이것을 추가하고 있습니다.
명확하게 말하면 사람들이 255-260 자라고 생각하는 이유는 이것이 Windows 탐색기가 지원하는 전부이기 때문입니다. 파일 이름보다 긴 파일 복사와 같은 작업을 수행하면 오류가 발생합니다. 그러나 프로그램은 훨씬 더 긴 파일 이름을 읽고 쓸 수 있습니다 (이것은 Explorer가 처음에 불평하는 길이에 도달하는 방식입니다). 이와 같은 상황에서 Microsoft의 "권장 수정 사항"은 파일을 작성한 원래 프로그램에서 파일을 열고 이름을 바꾸는 것입니다.
새로운 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
공식 문서 의이 부분은 NTFS, exFAT 및 FAT32 의 경우 255 유니 코드 문자 , UDF의 경우 127 유니 코드 또는 254 ASCII 문자 임을 분명히 밝힙니다 .
그 외에도 최대 경로 이름 길이는 항상 32,760 유니 코드 문자이며 각 경로 구성 요소는 255자를 초과하지 않습니다.
WCHAR
요소입니다. 아니요, "유니 코드 문자" 가 아닙니다 (유니 코드 용어 확인 : 코드 포인트, 문자 등 ...!).
255 자이지만 전체 경로는 이보다 길지 않아야합니다. Wikipedia에는 http://en.wikipedia.org/wiki/Filename과 같은 멋진 테이블이 있습니다.
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
w
). 그래서 지금 무엇?
실제로는 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에서 더 긴 경로를 읽을 수 있습니다.
위의 게시물을 읽으면 다섯 번째 확신 할 수있는 것을 볼 수 있습니다. 적어도 한 명의 컴퓨터 사용자를 찾는 것!
224 보다 긴 WS 2012 탐색기에서 이름 + 마침표 + 내선이있는 파일을 만들 수 없습니다 자를 . 메신저를 쏘지 마라!
동일한 서버의 CMD에서 235 자를 초과하는 문자 이름을 만들 수 없습니다 .
시스템이 지정된 경로를 찾을 수 없습니다.
탐색기에서 만든 224 자의 이름을 가진 파일은 Notepad ++에서 열 수 없습니다. 대신 새 파일이 나타납니다.
The system cannot find the path specified.
와 동일하지 않습니다 The specified path, file name, or both are too long.
. 나는 당신이 오타 나 무언가를 가지고 있다고 생각합니다. 존재하지 않는 경로에 파일을 만들려고하거나 존재하지 않는 방향으로 이동하려는 경우 해당 메시지가 나타납니다.