Tại sao bạn không thể sử dụng các ký tự đặc biệt trong một tên tệp, như là?


17

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?



Trong chương trình nào bạn đang cố lưu tệp và ký tự vi phạm trong tệp hoặc (có vẻ như) trong tên tệp?
Jukka K. Korpela


Câu trả lời:


22

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.
*?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ố.
<>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.


1
Để làm rõ câu trả lời này, các ký tự đặc biệt này có thể can thiệp vào việc phân tích cú pháp một dòng lệnh (hoặc đường dẫn) nếu chúng nằm trong tên tệp. Không có yêu cầu phân định tên tệp theo bất kỳ cách nào (ví dụ: bao quanh nó bằng dấu ngoặc kép hoặc dấu cách), do đó, việc gặp một char đặc biệt như vậy sẽ gây ra phân tích cú pháp không chính xác (nghĩa là phần char đặc biệt của tên tệp hoặc toán tử?).
mùn cưa

1
Tuy nhiên, người ta cho rằng một số hạn chế này không còn cần thiết do việc xử lý tên tập tin dài và dấu ngoặc kép. \ ? *"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
trlkly

<>"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 NtQueryDirectoryFilegọ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.
Eryk CN

Lưu ý rằ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.
Eryk CN
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.