2008-09-23 31 views

Trả lời

14

Từ: http://www.grouplogic.com/knowledge/index.cfm/fuseaction/view_Info/docID/111.

Các nhân vật sau không hợp lệ như tập tin hoặc thư mục tên trên Windows sử dụng NTFS: /?<>\:*|" và bất kỳ ký tự bạn có thể gõ với phím Ctrl.

Ngoài các ký tự không hợp lệ trên, dấu mũ ^ cũng không được phép trong Hệ điều hành Windows sử dụng hệ thống tệp FAT.

Trong Windows sử dụng tệp hệ thống tệp FAT và tên thư mục có thể dài tối đa 255 ký tự.

Trong Windows sử dụng tệp hệ thống tệp NTFS và tên thư mục có thể dài tối đa 256 ký tự.

Trong cửa sổ chiều dài của đường dẫn đầy đủ trong cả hai hệ thống là 260 ký tự.

Ngoài những nhân vật này, các quy ước sau đây cũng là bất hợp pháp:

  • Đặt một không gian ở phần cuối của tên
  • Đặt một khoảng thời gian vào cuối tên

Các tên tệp sau đây cũng được bảo lưu trong Windows:

  • com1,
  • com2,
  • ...
  • com9,
  • lpt1,
  • lpt2,
  • ...
  • lpt9,
  • con,
  • nul,
  • prn
+5

aux cũng không phải là tên tệp được phép trong Windows theo bài viết Adam đề cập đến –

+1

Tôi thấy tính hợp pháp của bài viết đó có vấn đề, vì nó nói rằng trên Mac OS X," Tệp và tên thư mục không được phép bắt đầu bằng dấu chấm '.' ", điều này hoàn toàn sai. – Chris

+1

Đó không chỉ là tên tệp mà bạn đã đặt trước trong Windows, đó là bất kỳ tên nào trong số đó tên thiết bị được theo sau bởi bất kỳ tiện ích mở rộng nào, ví dụ: 'COM5.foo' và' COM5.bar' là bất hợp pháp. –

2

Vâng, đối với MSDOS/Windows, NUL, PRN, LPT < n> và CON. Họ thậm chí gây ra vấn đề nếu được sử dụng với một phần mở rộng: "NUL.TXT"

+1

Rèn vào điều vô lý này hôm nay. Không có ý tưởng tại sao các tên tập tin này là bất hợp pháp nếu bạn thêm các phần mở rộng cho chúng>: ( –

+0

Tôi nghĩ rằng nó là các chương trình như LINK.EXE (nhớ điều đó?) Sẽ chấp nhận một tên tập tin cơ bản, và sau đó tạo ra ba tập tin khác nhau với phần mở rộng khác nhau. có thể chỉ cần gõ "nul" hoặc "prn", và chương trình chỉ có thể thêm một cách mù quáng vào phần mở rộng, và mọi thứ vẫn hoạt động –

4

Một Unix Gotcha khó khăn khi bạn không biết:

tập tin mà bắt đầu với - hoặc - là hợp pháp nhưng một cơn đau ở mông để làm việc với, vì nhiều công cụ dòng lệnh cho rằng bạn đang cung cấp các tùy chọn cho họ.

Nhiều người trong số những công cụ có một dấu hiệu đặc biệt "-" để báo hiệu kết thúc các tùy chọn:

gzip -9vf -- -mydashedfilename 
1

Trừ khi bạn đang chạm vào các thư mục đặc biệt, những cái tên bất hợp pháp duy nhất trên Linux là '.' và '..'. Bất kỳ tên khác là có thể, mặc dù truy cập một số trong số họ từ vỏ yêu cầu sử dụng trình tự thoát.

EDIT: Như Vinko Vrsalovic nói, các file bắt đầu bằng '-' và '--' được một nỗi đau từ vỏ, vì những chuỗi ký tự được giải thích bởi các ứng dụng, không phải là vỏ.

+0

Nếu đó là sự thật, làm thế nào để bạn tạo một tên tập tin với một dấu gạch chéo trong nó? – Malvineous

+0

Yep, '/'không hợp lệ trong tên tệp trên bất kỳ loại hệ thống tệp nào – Basic

4

Như những người khác đã nói, tên thiết bị như COM1 không thể làm tên tệp trong Windows vì chúng là thiết bị dành riêng.

Tuy nhiên, có một phương pháp thoát để tạo ra và các file truy cập với các tên dành riêng, ví dụ, lệnh này sẽ chuyển hướng đầu ra của lệnh ver vào một tập tin gọi là COM1:

ver > "\\?\C:\Users\username\COM1" 

Bây giờ bạn sẽ có một tệp được gọi là COM1, 99% chương trình sẽ không thể mở và có thể sẽ đóng băng nếu bạn cố gắng truy cập.

Here's the Microsoft article giải thích cách "không gian tên tệp" hoạt động. Về cơ bản nó nói với Windows không làm bất kỳ xử lý chuỗi nào trên văn bản và truyền nó trực tiếp tới hệ thống tập tin. Thủ thuật này cũng có thể được sử dụng để làm việc với các đường dẫn dài hơn 260 ký tự.

+0

Tôi đã thử xóa tập tin đã tạo một lần nữa, nhưng del bị đóng băng trong dòng lệnh ... Edit: I cant event kill cmd với trình quản lý tác vụ hoặc quá trình hacker ... những gì đang xảy ra ở đây? –

+0

Làm việc tốt cho tôi. Bạn không thể 'del COM1' vì dĩ nhiên sẽ cố gắng truy cập vào cổng nối tiếp thay vì tệp và gây ra quá trình khóa, chờ phản hồi từ cổng nối tiếp (chính xác là lý do tại sao tên tệp như thế này được đặt trước và không có sẵn để sử dụng ở nơi đầu tiên.) Nếu bạn sử dụng phương pháp thoát trong câu trả lời của tôi để tạo tệp, thì bạn sẽ phải sử dụng để xóa tệp đó: 'del '\\? \ C: \ Users \ username \ COM1 "' – Malvineous

+0

Tất nhiên tôi đã sử dụng cùng một \\? \ Path để xóa. Tôi tự hỏi tại sao cmd của tôi đông cứng lại. Tôi đã từ bỏ và cài đặt lại hệ điều hành hoàn chỉnh của mình. Điều đó cố định nó khá nhanh. –

Các vấn đề liên quan