2013-07-26 46 views
25

Tôi đã chạy một chương trình trên Windows 7 được biên dịch dưới Cygwin và chuyển "NUL" làm tên tệp đầu ra. Thay vì triệt tiêu đầu ra nó thực sự tạo ra một tập tin có tên là "NUL" trong thư mục hiện hành. (Dường như nó mong đợi "/ dev/null", ngay cả trên Windows.) Bây giờ tôi đang mắc kẹt với tập tin "NUL" này mà tôi không thể xóa!Xóa tệp có tên "NUL" trên Windows

Tôi đã cố gắng:

  • Windows Explorer - lỗi: "Invalid MS-DOS chức năng" (! Vâng, đó là nghiêm túc những gì nó nói)
  • Cửa sổ nhắc lệnh sử dụng "del NUL" - lỗi: "Tên tệp, tên thư mục hoặc khối lượng cú pháp nhãn không chính xác".
  • Xóa toàn bộ thư mục - cùng thỏa thuận như chỉ xóa các tập tin
  • remove() trong một chương trình C - cũng không

Làm thế nào tôi có thể thoát khỏi những tập tin này NUL (Tôi có một vài bằng bây giờ), ngắn cài đặt môi trường Cygwin đầy đủ và biên dịch chương trình C dưới Cygwin để làm điều đó?

Trả lời

58

Mở một dấu nhắc lệnh và sử dụng các lệnh này trước tiên đổi tên và sau đó xóa các tập tin NUL:

C:\> rename \\.\C:\..\NUL. deletefile.txt 
C:\> del deletefile.txt 

dùng tiền tố \\.\ nói với các tập tin cấp cao I/O chức năng để vượt qua các tên tập tin chưa phân tích đến trình điều khiển thiết bị - theo cách này bạn có thể truy cập các tên không hợp lệ khác.

Đọc this article về tên tệp/đường dẫn hợp lệ trong Windows và các tên được đặt trước khác nhau.

+1

Điều thú vị là, Far Manager có thể xóa tệp đó mà không gặp sự cố. Có lẽ nó sử dụng lừa trong nội bộ vô điều kiện. – Joey

+8

Tuyệt vời, cảm ơn! Ngay cả việc xóa nó trực tiếp dường như hoạt động nếu tôi sử dụng tiền tố \\. \ Trước đường dẫn đầy đủ, ví dụ. del \. \ C: \ Temp \ NUL – EM0

+0

@ Јοеу Trên Windows 8 của tôi Far có vấn đề với việc xóa/tạo một tập tin có tên 'nul 'nhưng tôi đang sử dụng v1.75 - v3.0 có thể có tính năng đó được thêm vào. – xxbbcc

-2

Thử viết chương trình C ngắn gọi Windows API để xóa tệp đó.

http://msdn.microsoft.com/en-us/library/aa363915%28v=vs.85%29.aspx

Nếu điều đó không làm việc, hãy thử mở một xử lý cho các tập tin với CreateFile() với FILE_FLAG_DELETE_ON_CLOSE, và sau đó đóng xử lý.

+0

Khá chắc chắn điều này sẽ được giải thích bởi lớp Win32 như đề cập đến cái gọi là "DOS" thiết bị, không phải là tập tin. (Có lẽ, thiết bị "DOS" sẽ không thực sự bị xóa, bởi vì nếu đó là điều có thể được thực hiện một cách tình cờ hơn là tôi chắc chắn nó sẽ xảy ra với ai đó tham gia ở đây hoặc tại https: // superuser. com/questions/282194/how-do-i-remove-a-file-tên-nul-on-windows ...) – SamB

2

Tôi gặp sự cố tương tự. Nó có thể do Cygwin gây ra (vì tôi sử dụng nó thường xuyên), nhưng tôi đã quên mất chính xác cách mà tập tin được tạo ra.

Tôi cũng gặp sự cố khi xóa nó. Tôi theo lời khuyên của một số bài viết khác và cố gắng khởi động vào chế độ an toàn để xóa các tập tin, mặc dù điều này đã không làm gì. Mẹo từ + xxbbcc cũng không hiệu quả với tôi.

Tuy nhiên, tôi có thể xóa tệp bằng thiết bị đầu cuối Cygwin! Cygwin createth và Cygwin tiêu diệt.

+3

Nếu bạn đã có Cygwin, chỉ cần thử 'rm NUL'. Nó làm việc cho tôi. –

+1

Tôi đã có một vấn đề tương tự như được ghi nhận bởi Jan E., ngoại trừ tôi đang sử dụng Hệ thống con Windows trên Linux (WSL). Đã xóa tệp 'rm' của WSL bash. –

0

Tôi đã giải quyết vấn đề này theo một cách hơi khác.

Tôi nghĩ rằng tôi sẽ thêm điều này ở đây vì nó cao trong kết quả của google và tôi gặp sự cố tương tự cho thư mục có tên là NUL.

Tôi đã thử rmdir\\?\C:\My\Path\NULrmdir\\.\C:\My\Path\NUL mà không có bất kỳ thành công nào và cũng đã thử một số lệnh bằng cách sử dụng bash từ cài đặt SourceTree của tôi. Không vui.

Cuối cùng tôi đã sử dụng DIR /X /A từ cmd để liệt kê các tên ngắn trong thư mục chính.Điều này cho thấy tôi NUL~1 cho thư mục NUL của tôi và xác định điểm mấu chốt của vấn đề.

Điều này sau đó được sử dụng trong lệnh tiêu chuẩn rmdir /s NUL~1 và cuối cùng đã giải quyết được sự cố.

+0

Tôi nghĩ rằng bạn là một trường hợp hơi khác nhau trong đó * tên dài * của thư mục là "NUL", nhưng tên MSDOS 8.3 thì không. Vì vậy, điều này rất hữu ích để biết, nhưng không giống như vấn đề ban đầu của tôi, mà tôi chỉ cần thử nghiệm một lần nữa bằng cách sử dụng Cygwin. Sau khi chạy 'mkdir nul' trong cygwin' dir/x/a' không hiển thị tên ngắn, vì vậy thư mục này thực sự được đặt tên là "nul". 'rd \\? \ C: \ Đường dẫn \ NUL' và' rd \\. \ C: \ Đường dẫn \ NUL' đều hoạt động trong trường hợp này. – EM0