Các ký tự không hợp lệ cho tên tệp trong OS X là gì?


22

Tôi gặp khó khăn khi tìm thông tin này, và bản dùng thử và lỗi đang nói với tôi rằng có thể không có bất kỳ thông tin nào. Các ký tự không hợp lệ cho tên tệp trên OS X Lion (10.7) là gì?


1
Chém về phía trước? Dấu gạch chéo đơn? Thời kỳ đơn hay đôi?

Tất cả các dấu gạch chéo và đĩa đơn dường như hoạt động, nhưng một khoảng thời gian đơn và đôi không thành công vì chúng đã được sử dụng. Tôi hy vọng có nhiều hơn thế .... :)
Rodney Foley

Bạn không thể sử dụng ASCII NUL. Hãy suy nghĩ một lúc và bạn có thể nhận ra lý do tại sao bản thân bạn
Donal Fellows

@Donal ASCII NUL không phải là thứ bạn có thể dễ dàng chỉ "gõ" hoặc làm sai một cách có vấn đề.
Rodney Foley

1
Bạn có thể cho chúng tôi một số bối cảnh, Rodney? Sẽ rất hữu ích khi trả lời điều này nếu chúng ta hiểu một chút về những gì bạn đang cố gắng làm ... AFAIK, có một vài vấn đề tiềm ẩn: các nhân vật bị cấm thành thật , không thể nhập vào như một đường dẫn trong vỏ thiết bị đầu cuối và các ký tự sẽ không hiển thị đúng trong Finder.
Shog9

Câu trả lời:


7

HFS Plus cho phép " Unicode , bất kỳ ký tự nào, kể cả API hệ điều hành NUL. Có thể giới hạn một số ký tự vì lý do cũ"


3
Về mặt kỹ thuật, hệ thống tệp HFS + cho phép tất cả các ký tự Unicode (vì nó đại diện cho các tên bên trong dưới dạng các chuỗi Pascal có độ dài 2 byte), nhưng AFAIK không có API nào do OS X cung cấp cho phép bạn tạo / mở các tệp bằng dấu gạch chéo '/'hoặc NUL '\0'trong chúng .
Adam Rosenfield

API như trong Carbon hoặc ca cao? Tôi giả sử Terminal bị hạn chế như vậy, nhưng còn các kịch bản được chạy bởi các chương trình khác, chẳng hạn như launchd thì sao?
tobylane

8

Các ký tự không hợp lệ cho tên tệp trong OS X là gì?

wiki HFS + :

Các ký tự được phép trong tên tệp Unicode, bất kỳ ký tự nào, kể cả NUL. API hệ điều hành có thể giới hạn một số ký tự vì lý do cũ


Finder hiện không cho phép nhập dấu hai chấm vào tên tệp, nhưng nó cho phép nhập dấu gạch chéo ngược. Tuy nhiên, các ký tự được hiển thị dưới dạng dấu gạch chéo trong Finder được hiển thị dưới dạng dấu hai chấm trong shell và ngược lại. Finder không cho phép bất kỳ ký tự điều khiển ASCII nào.


Bash dường như cho phép tất cả các nhân vật điều khiển ngoại trừ \000(NUL). Tôi đã kiểm tra nó bằng cách chạy đầu ra từ:

for i in {1..31} 127 0; do echo touch \\$(bc <<< "obase=8;$i"); done

2

EDITED

Theo Wikipedia , ký tự không hợp lệ duy nhất là dấu gạch chéo /, nhưng ở lớp UNIX.


2
Có thể :bị cấm trên Mac OS Classic, nhưng chắc chắn không phải trên Mac OS X. touch foo:barhoạt động hoàn toàn tốt.
Adam Rosenfield

1
Câu trả lời đã được cập nhật. Bạn được chào đón để loại bỏ downvote của bạn.

5
@Adam: :hợp lệ trong lớp Unix của lớp, nhưng nó được dịch sang / từ /trong các lớp Mac của Mac (ví dụ như Finder, hầu hết các hộp thoại liên quan đến tệp, v.v.): dấu hai chấm được sử dụng làm dấu phân cách trong đường dẫn HFS Phần cứng và dấu gạch chéo được sử dụng làm dấu phân cách trong đường dẫn POSIXIX do đó có một bản dịch hai chiều tùy thuộc vào lớp mà bạn đang làm việc với lớp nào.
Chris Johnsen

2
Vì vậy, không có dấu gạch chéo ( /) hoặc dấu hai chấm ( :) để an toàn?
Nicolas Miari

2
@NicolasMiari Vâng. Finder.app sẽ không cho phép bạn nhập dấu hai chấm và sẽ không hoạt động chính xác với tên tệp có chứa nó. Lớp UNIX sẽ không cho phép bạn làm việc với các tệp có dấu gạch chéo (hay đúng hơn là nó dịch nó thành dấu hai chấm). Và sau đó, có những ứng dụng khác (như Microsoft Word) cũng bị nghẹt thở. Chẳng hạn, nếu bạn lưu tài liệu trong TextEdit.app dưới tên tệp foo/bar.docx(hoạt động), Microsoft Word sẽ không thể mở nó.
Konrad Rudolph
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.