Độ dài tên tệp tối đa trong NTFS (Windows XP và Windows Vista)?


261

Tôi đang thiết kế một bảng cơ sở dữ liệu sẽ chứa tên tệp của các tệp được tải lên. Độ dài tối đa của tên tệp trong NTFS được Windows XP hoặc Vista sử dụng là bao nhiêu?


83
Tôi chưa bao giờ thấy nhiều câu trả lời khác nhau cho những gì phải là một câu hỏi đơn giản. 199, 255, 256, 257, 260, 'khoảng 30 000', 'khoảng 32 000' và 'tùy thuộc'. Chắc chắn, có vòng loại, nhưng tất cả đều không thể đúng?
MickeyfAgain_B BeforeExitOfSO

7
Nó là 255, tôi biết điều này khi tôi phải xây dựng một ứng dụng để ngăn người dùng doanh nghiệp tiếp cận điều này, vì nó gây ra sự cố trên các máy chủ lưu trữ của chúng tôi.
RobertPitt

2
@RobertPitt. Bạn đang thiếu một cái gì đó trong đó. Trích dẫn từ MSDN: "độ dài tối đa cho một đường dẫn là MAX_PATH, được xác định là 260 ký tự"
Michael Olesen

7
@ Michael9000. Tôi tin rằng RobertPitt đã trích dẫn giới hạn tên tệp (đó là câu hỏi này là gì), không phải giới hạn đường dẫn.
gdw2

7
NTFS hoàn toàn không bị giới hạn ở MAX_PATH, Windows Shell bị giới hạn ở MAX_PATH, chiều dài đường dẫn tối đa NTFS là 32k
paulm

Câu trả lời:


286

Các thành phần riêng lẻ của một tên tệp (tức là mỗi thư mục con dọc theo đường dẫn và tên tệp cuối cùng) được giới hạn ở 255 ký tự và tổng chiều dài đường dẫn được giới hạn trong khoảng 32.000 ký tự.

Tuy nhiên, trên Windows, bạn không thể vượt quá MAX_PATHgiá trị (259 ký tự cho tệp, 248 cho thư mục). Xemhttp://msdn.microsoft.com/en-us/l Library / aa365247.aspx để biết chi tiết đầy đủ.


4
Dưới đây là một số sự thật xác nhận câu trả lời này (Windows thường giới hạn ở 260 ký tự): msdn.microsoft.com/en-us/l Library / trộmblog.msdn.com/b/bclteam/archive/2007/02/13 /
Lọ

62
Đúng cho NTFS, không đúng với Windows, theo liên kết bạn đã cung cấp: "Trong API Windows (với một số ngoại lệ được thảo luận trong các đoạn sau), độ dài tối đa cho một đường dẫn là MAX_PATH, được xác định là 260 ký tự". Các tổng con đường được, cho tất cả các mục đích thực tế, giới hạn trong 259 ký tự (cho phép null-terminator).
Lawrence Dol

9
Rõ ràng nếu bạn sử dụng "phiên bản unicode" của các phương thức tệp API Windows, bạn có thể nhận được tới 32767 nếu bạn đặt tiền tố tên đường dẫn với "\\? \" Có đúng không?
rogerdpack

6
@rogerdpack: đối với đường dẫn đầy đủ, có, nhưng mỗi thành phần riêng lẻ (thư mục con / tệp cuối cùng) có giới hạn 255 điểm mã utf-16. Thêm vào đó, phần mềm bình thường mong đợi MAX_PATH, vì vậy ... bùng nổ :)
snemarch

5
Trong Windows 10 (Phiên bản 1607 - Cập nhật kỷ niệm) và Windows Server 2016, bạn có một tùy chọn để bỏ qua vấn đề MAX_PATH bằng cách ghi đè mục nhập chính sách nhóm cho phép các đường dẫn dài NTFS trong Cấu hình máy tính -> Mẫu quản trị -> Hệ thống -> Hệ thống tệp:
Steven Mark Ford

28

Đó là 257 ký tự. Nói chính xác: NTFS tự áp đặt độ dài tên tệp tối đa vài nghìn ký tự (khoảng 30.000 thứ gì đó). Tuy nhiên, Windows áp đặt độ dài tối đa 260 cho Đường dẫn + Tên tệp. Thư mục ổ đĩa + chiếm ít nhất 3 ký tự, vì vậy bạn kết thúc với 257.


21
Sai - bộ kết thúc NUL là một phần của MAX_PATH, cho phép bạn có đường dẫn tối đa 256 ký tự (mà bạn sẽ không thể tạo vì giới hạn thành phần riêng lẻ là 255).
snemarch

4
"mà bạn sẽ không thể tạo vì giới hạn thành phần cá nhân là 255" Sai. Chúng ta đang nói ở đây về độ dài đường dẫn tối đa, không phải chiều dài thành phần đường dẫn riêng lẻ tối đa. Ngoài ra, "Khi sử dụng API để tạo thư mục, đường dẫn được chỉ định không thể dài đến mức bạn không thể nối thêm tên tệp 8.3 (nghĩa là tên thư mục không thể vượt quá MAX_PATH trừ 12)."
Ludovic Kuty

Cuộc tranh luận này chỉ diễn ra vì api cấp thấp cho phép tạo tên tệp 256 ký tự, với giả định rằng 256 char là null, nhưng tệp không thể truy cập được (ẩn) cho các ứng dụng gốc, do đó thường không hữu ích.
Conrad B

1
@LudovicKuty: thực sự OP đã nói về giới hạn độ dài tên tệp , không phải độ dài đường dẫn (vâng, ngay cả trong phiên bản gốc, tôi đã kiểm tra). Và anh ấy đã đặc biệt đề cập đến các giới hạn NTFS và không liên quan đến các giới hạn của HĐH, một hệ thống con hoặc API hoặc khung cụ thể.
0xC0000022L

@ 0xC0000022L Đúng vậy. Tôi đã đọc sai nó trong câu hỏi OP và tập trung vào các bình luận nói về độ dài tên tệp và độ dài đường dẫn.
Ludovic Kuty

27

Đây là những gì "ngoại lệ chưa được xử lý" nói trên khung 4.5 khi cố lưu tệp có tên tệp dài:

Đường dẫn được chỉ định, tên tệp hoặc cả hai quá dài. Tên tệp đủ điều kiện phải có ít hơn 260 ký tự và tên thư mục phải nhỏ hơn 248 ký tự.

ảnh chụp màn hình


16

199 trên Windows XP NTFS, tôi vừa kiểm tra.

Đây không phải là lý thuyết mà chỉ là thử trên máy tính xách tay của tôi. Có thể có tác dụng giảm nhẹ, nhưng về mặt thể chất sẽ không cho phép tôi làm cho nó lớn hơn.

Có một số thiết lập khác giới hạn điều này, tôi tự hỏi? Hãy thử nó cho chính mình.


1
Xác nhận điều này trên phiên bản XP của tôi, thật là đau
Julian Young

Tôi đã làm chính xác như vậy trên Windows XP chỉ để cười khúc khích. Tôi đạt giới hạn ở 200 ký tự. Sau đó, tôi chỉ cần tạo một tệp với 255 lần w, xóa nó và tạo một thư mục có cùng tên trên Windows 7 x64. Bây giờ câu hỏi là yếu tố giới hạn ở đây là gì: phiên bản NTFS, HĐH hoặc hệ thống con hoặc API Win32 trong XP?
0xC0000022L

Giới hạn 200 ký tự dường như nằm trong explorer. Các chương trình khác có thể tạo tên tệp dài hơn. Đây có lẽ là một giới hạn có chủ ý để cứu người dùng khỏi anh ấy / cô ấy. :-)
avl_sweden

13

Theo MSDN , đó là 260 ký tự. Nó bao gồm "<NUL>"- ký tự null kết thúc vô hình, vì vậy độ dài thực tế là 259.

Nhưng đọc bài viết, nó phức tạp hơn một chút.


1
Trên thực tế, bài viết MSDN được tham chiếu nói rằng đường dẫn được giới hạn ở 260 ký tự nhưng độ dài của tên tệp phụ thuộc vào hệ thống tệp (nhưng thường là 255 byte). Tuy nhiên, có thể sử dụng "phiên bản Unicode [của các hàm API của Windows]" để tăng giới hạn đường dẫn lên 32767 byte nhưng giới hạn đó được giảm bằng cách mở rộng nội bộ \\?\ tiền tố cần thiết trong thời gian chạy đến một số độ dài không xác định. Đường dẫn phải ở dưới 32767 byte sau khi mở rộng này.
Mikko Rantalainen

13

Độ dài trong NTFS là 255. NameLengthTrường trong $Filenamethuộc tính NTFS là một byte không có offset; điều này mang lại một phạm vi 0-255.

Tên tập tin iself có thể ở các "không gian tên" khác nhau. Cho đến nay có: POSIX, WIN32, DOS và (WIN32DOS - khi tên tệp có thể là tên DOS). (Vì chuỗi có độ dài, nó có thể chứa \ 0 nhưng điều đó sẽ dẫn đến các vấn đề và không nằm trong các không gian tên ở trên.)

Do đó, tên của một tập tin hoặc thư mục có thể lên tới 255 ký tự. Khi chỉ định đường dẫn đầy đủ trong Windows, bạn cần đặt tiền tố đường dẫn với \? \ (Hoặc sử dụng \? \ UNC \ server \ share cho đường dẫn UNC) để đánh dấu đường dẫn này là đường dẫn có độ dài mở rộng (~ 32k ký tự) . Nếu đường dẫn của bạn dài hơn, bạn sẽ phải đặt thư mục làm việc của mình trên đường đi (ugh - tác dụng phụ do cài đặt toàn quy trình).




4

Tôi đang thêm điều này vào câu trả lời đã được phê duyệt ở trên.

ĐỂ R CLE RÀNG, lý do mọi người tin rằng nó có 255-260 ký tự là vì đó là tất cả những gì Windows Explorer hỗ trợ. Nó sẽ lỗi khi làm một cái gì đó giống như một bản sao tập tin trên tên tệp lâu hơn thế. Tuy nhiên, một chương trình có thể đọc và viết tên tệp dài hơn nhiều (đó là cách bạn đạt được độ dài mà Explorer phàn nàn ở vị trí đầu tiên). "Đề nghị sửa lỗi" của Microsoft trong các tình huống như thế này là mở tệp trong chương trình gốc đã viết và đổi tên nó.


Tôi đã cố gắng lưu một tập tin sâu xuống một hệ thống phân cấp thư mục chắc chắn vượt quá 260 ký tự từ dòng lệnh với vim nhưng không thành công.
panny

@panny: vì vậy các tác giả của Vim đã không quan tâm đến việc thực hiện tên đường dẫn dài sau đó. Đó không phải là Windows để đổ lỗi cho hệ thống con Win32 và cũng không liên quan gì đến giới hạn độ dài tên tệp cho NTFS mà OP đã hỏi.
0xC0000022L

3

Theo tài liệu SDK Windows mới (8.0), dường như giới hạn đường dẫn mới được cung cấp. Có một bộ chức năng xử lý đường dẫn mới và định nghĩa về PATHCCH_MAX_CCH như sau:

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

3
Tuy nhiên, Windows 8 explorer (Win8.1 Preview trong trường hợp của tôi) không hoạt động với giới hạn này và nó sẽ không chấp nhận các đường dẫn dài hơn 259 ký tự.
Cplusminus_is_ sắp tới

3

Phần tài liệu chính thức này nói rõ rằng đó là 255 ký tự Unicode cho NTFS, exFAT và FAT32, và 127 ký tự Unicode hoặc 254 ASCII cho UDF.

Ngoài ra, độ dài tên đường dẫn tối đa luôn là 32.760 ký tự Unicode, với mỗi thành phần đường dẫn không quá 255 ký tự.


Đủ gần. Như tôi đã chỉ ra trong một nhận xét về câu trả lời được chấp nhận, đó là 32767 WCHARyếu tố. Không, đó không phải là "ký tự Unicode" (kiểm tra thuật ngữ Unicode của bạn: điểm mã, ký tự, v.v ...!).
0xC0000022L


-2

238! Tôi đã kiểm tra nó dưới Win7 32 bit với tập lệnh bat sau:

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

Tôi đã kiểm tra nó trong Windows 7 với một chương trình xử lý các đường dẫn dài một cách chính xác. Mỗi phân đoạn đường dẫn riêng lẻ có thể chiếm tới 255 ký tự (tôi đã sử dụng w). Giờ thì sao?
0xC0000022L

-2

Trên thực tế là 256, xem So sánh chức năng hệ thống tệp, giới hạn .

Để lặp lại một bài đăng trên http://fixunix.com/microsoft-windows/30758-windows-xp-file-name-length-limit.html

"Giả sử chúng ta đang nói về NTFS chứ không phải FAT32," 255 ký tự cho đường dẫn + tệp "là một hạn chế của Explorer, không phải là chính hệ thống tệp. NTFS hỗ trợ các đường dẫn dài tới 32.000 ký tự Unicode, với mỗi thành phần lên tới 255 ký tự.

Explorer - và API Windows - giới hạn bạn 260 ký tự cho đường dẫn, bao gồm ký tự ổ đĩa, dấu hai chấm, dấu gạch chéo và ký tự null kết thúc. Bạn có thể đọc một đường dẫn dài hơn trong Windows nếu bạn bắt đầu bằng một \\"

Nếu bạn đọc các bài viết trên, bạn sẽ thấy có một điều thứ 5 bạn có thể chắc chắn: Tìm kiếm ít nhất một người dùng máy tính cố chấp!


4
Không - đó là 255. Trường NameLpm trong thuộc tính NTFS $ Filename là một byte không có offset; điều này mang lại một phạm vi 0-255
Dominik Weber

-2

Tôi không thể tạo một tệp có tên + period + extnesion trong WS 2012 Explorer dài hơn 224 ký tự. Đừng bắn sứ giả!

Trong CMD của cùng một máy chủ, tôi không thể tạo tên dài hơn 235 ký tự:

Hệ thống không thể tìm đường dẫn cụ thể.

Không thể mở tệp có tên ký tự 224 được tạo trong Explorer trong Notepad ++ - thay vào đó, nó chỉ xuất hiện với một tệp mới.


The system cannot find the path specified.không giống như The specified path, file name, or both are too long.. Tôi đoán bạn đã có một lỗi đánh máy hoặc một cái gì đó. Bạn nhận được thông báo đó nếu bạn cố gắng tạo một tệp theo đường dẫn không tồn tại hoặc nếu bạn muốn di chuyển đến một hướng không tồn tại.
Matthias Burger
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.