2012-07-27 19 views
7

Làm cách nào một tệp hoạt động với tên tệp kết thúc trong một khoảng thời gian bằng Python? Theo trang web của MSDN, tên tập tin như vậy là hợp lệ trong Windows, nhưng bất cứ khi nào tôi cố gắng để tạo ra một trong Python, nó loại bỏ giai đoạn cuối cùng. Tôi thậm chí đã cố gắng tạo ra một mô tả tập tin thô với os.open, nhưng nó vẫn loại bỏ thời gian.Làm cách nào để tạo tên tệp có dấu chấm trong Windows?

Ví dụ, điều này sẽ tạo ra một tập tin đơn giản có tên là 'test'

os.open('test.', os.O_CREAT | os.O_WRONLY, 0777) 

Edit: Here is the exact quote

Về không gian và dấu chấm trong tên tập tin và thư mục. Các giới hạn là trong vỏ cửa sổ - không phải trong Windows hoặc NT. Sử dụng 'bash', bạn có thể tạo tệp có dấu cách (hoặc dấu chấm), cả hai, ở đầu và cuối của tên tệp. Sau đó, bạn có thể liệt kê và mở các tệp đó trong trình khám phá và bạn có thể 'liệt kê' chúng trong trình bao (cmd.exe), nhưng bạn sẽ không nhất thiết phải có thể mở chúng từ vỏ (đặc biệt là dấu cách và chấm).

+2

Bạn có thể vui lòng cung cấp một liên kết đến bài viết MSDN nói rằng tên tập tin kết thúc với khoảng thời gian là hợp lệ. Đây là những gì tôi thấy trong wikipedia: "Các chuỗi Win32 API dấu cách không gian và dấu chấm (toàn bộ) ký tự từ tên tệp, ngoại trừ khi đường dẫn UNC được sử dụng" (http://en.wikipedia.org/wiki/Filename) – sateesh

+0

bạn đã thử tạo một tệp có dấu chấm trong tên tệp trong cửa sổ? Nó sẽ không được tạo ra. Sau khi đổi tên, nó được hiển thị dưới dạng 'test' thay vì 'test'. Tôi tin rằng nó là để làm với cửa sổ không python. –

+0

@Sateesh Tôi đã thêm liên kết. – Antimony

Trả lời

6

Tôi đã tìm ra cách thực hiện việc này. Rõ ràng, đi qua một tên tập tin bình thường sẽ loại bỏ thời gian ngay cả khi gọi Win API trực tiếp từ C. Để tạo ra các tên tập tin lạ, bạn phải sử dụng tiền tố \\?\ (điều này cũng vô hiệu hóa đường dẫn tương đối và cắt giảm chuyển đổi).

open('\\\\?\\C:\\whatever\\test.','w') 

Rất xấu và không thể di chuyển được nhưng hoạt động.

+1

Đây chính xác là sự khác biệt giữa các API Win32 và khả năng NTFS. Win32 API tách tên tập tin trong phần mở rộng tên + và có rất nhiều xử lý cho điều đó, trong khi NTFS không thực sự quan tâm. Trình tự '\\? \' Vô hiệu hóa việc xử lý đặc biệt trong hầu hết các API Win32 và khiến chúng chuyển trực tiếp tên tệp sang API NTFS trực tiếp hơn, vì vậy bạn có thể thực hiện những điều mà API Win32 thường ngăn chặn. Là một ứng dụng bình thường, bạn có nghĩa vụ phải chơi tốt và phù hợp với Win32. – Oliver

0

Windows sẽ loại bỏ dấu chấm cuối cùng, giả sử đó là dấu phân cách giữa tên tệp và tiện ích mở rộng trống. Hãy thử sử dụng hai khoảng thời gian.

4

Cú pháp \\?\ cũng làm việc với cmd.exe:

dir>"\\?\C:\whatever\test." 
Các vấn đề liên quan