Khi tôi cố lưu tệp, nếu tôi sử dụng các ký tự đặc biệt trong tên (chẳng hạn như dấu hai chấm, dấu hỏi hoặc dấu chấm than) trong Windows, tôi nhận được thông báo nói rằng tên tệp không hợp lệ.
Tại sao vậy?
Khi tôi cố lưu tệp, nếu tôi sử dụng các ký tự đặc biệt trong tên (chẳng hạn như dấu hai chấm, dấu hỏi hoặc dấu chấm than) trong Windows, tôi nhận được thông báo nói rằng tên tệp không hợp lệ.
Tại sao vậy?
Câu trả lời:
Có một số ký tự có ý nghĩa đặc biệt với Windows (và với DOS, nơi hầu hết các ký tự ban đầu đến từ)
từ MSDN :
Tên tệp không thể chứa bất kỳ ký tự nào sau đây:
\ /: *? "<> |
/
là một công tắc (và cũng là một dấu phân cách thư mục).
\
là một dấu phân cách thư mục.
:
là một chỉ định ổ đĩa.
*
và ?
là các ký tự đại diện được sử dụng trong tìm kiếm.
"
là một cách để cho phép không gian trong các tham số.
<
và >
là chuyển hướng cho phép đầu vào và đầu ra của một chương trình đến và đi đến, một cái gì đó không phải là màn hình / bàn phím.
|
là một đường ống cho phép đầu ra từ một chương trình được sử dụng làm đầu vào cho kế tiếp.
\
?
*
và "
là những cái duy nhất thực sự cần thiết trong cú pháp hiện tại, vì các ký tự khác chỉ hữu ích bên ngoài dấu ngoặc kép. Ngoại lệ là: chỉ hữu ích như nhân vật thứ hai, có thể bị đặt ngoài vòng pháp luật trong khi cho phép nó ở nơi khác. Nói cách khác, không có tệp nào được đặt tên A:A letter's story.txt
, nhưng không có vấn đề gì với tệp có tênSarah: My favorite cat.txt
<>"
là các ký tự đại diện dành riêng. Windows sử dụng chúng để triển khai ngữ nghĩa phức tạp cho DOS *?.
khi dịch sang NT gốc, có ngữ nghĩa đơn giản cho *?.
. Sáu ký tự đại diện được bảo lưu vì Windows thực hiện khớp ký tự đại diện trong chính hệ thống tệp, tức là trực tiếp trong lệnh NtQueryDirectoryFile
gọi hệ thống, không có cơ chế thoát. Trong Unix, các ký tự đại diện được triển khai ở cấp ứng dụng, thường là bằng trình bao hỗ trợ thoát chúng.
:
thường được dành riêng trong tên tệp, nhưng không phải trong đường dẫn tệp. Nó được sử dụng cho tên thiết bị và làm dấu phân cách cho luồng tệp (ví dụ: "tên tệp: streamname: streamtype"). Ngoài ra, một số hệ thống tập tin như VirtualBox chia sẻ thư mục hệ thống tập tin cho phép :
, |
và ký tự điều khiển ASCII (1-31) trong tên tập tin, nhưng họ đang dự trữ trong tất cả các hệ thống tập tin của Microsoft trừ các hệ thống tập tin có tên ống.