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?
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?
Câu trả lời:
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_PATH
giá 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 đủ.
Đó 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.
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.
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?
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.
\\?\
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.
Độ dài trong NTFS là 255. NameLength
Trường trong $Filename
thuộ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).
255 ký tự.
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ó.
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
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ự.
WCHAR
yế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 ...!).
255 ký tự, mặc dù đường dẫn hoàn chỉnh không nên dài hơn đó. Có một bảng hay trên Wikipedia về điều này: http://en.wikipedia.org/wiki/Filename .
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
w
). Giờ thì sao?
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!
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.