2013-03-26 23 views
6

Tôi không thể tìm thấy bất kỳ thông tin nào về vấn đề này thông qua giáo sư Google, vì vậy, tôi ở đây. Lấy tên đường dẫn đã cho và dán nó vào Windows Explorer. Tôi tình cờ gặp vấn đề này sau khi phát hiện lỗi trong mã của tôi đã tạo ra các đường dẫn có thêm '.' trong tên đường dẫn trước khi phân cách thư mục \ ...Hành vi lạ từ .NET về đường dẫn tệp

@"C:\\pathto.\file.ext" 

Trong mã, .NET sẽ chấp nhận con đường khi gọi File.Create và một tập tin sẽ được tạo ra, nhưng con đường này:

@"C:\\pathto\file.ext" 

Sao chép C:\\pathto.\file.ext vào thanh địa chỉ của Windows Explorer và xem '.' biến mất và đưa bạn đến C:\\pathto\file.ext

Có hành vi bình thường đối với .NET và Windows không gây ra sự cố vì '.' đang bị loại bỏ bởi cả .NET và Windows khi được truyền vào các hoạt động tập tin. Vấn đề thực sự là tất cả các tệp trong DB đều có tên tệp có dấu '. \', Nhưng tồn tại trong đường dẫn không có '. \' ... và File.Exists() cũng vậy, mặc dù đường dẫn không phải là 'thực' vị trí thực tế ...

Điều gì đang xảy ra ở đây?

+0

Trước tiên, bạn có thể làm cho nó dễ dàng hơn để sao chép và dán đường dẫn bằng cách sử dụng, ví dụ. Định dạng '@" C: \ Users \ Matt "' (một 'chuỗi chữ nguyên văn'). –

+0

Có thể Windows cấm tên tập tin (và thư mục) bắt đầu hoặc kết thúc bằng '.'? –

+0

Có điều này là bình thường. Thử tạo thư mục kết thúc bằng một điểm dừng hoàn toàn sẽ không thay đổi. – TheKingDave

Trả lời

4

Đây là "tính năng" của hệ thống tệp Windows. MSDN:

Không kết thúc tệp hoặc tên thư mục có dấu cách hoặc dấu chấm. Mặc dù hệ thống tệp cơ bản có thể hỗ trợ các tên như vậy, giao diện người dùng và trình bao Windows không. Tuy nhiên, có thể chấp nhận chỉ định một dấu chấm làm ký tự đầu tiên của tên. Ví dụ: ".temp".

0

Tất cả Windows API bình thường bỏ qua/xóa trailing chấm trong file/tên thư mục khi con đường thường xuyên được thông qua vào.

Nếu bạn thực sự cần hỗ trợ cho các dấu chấm bạn cần phải sử dụng "\\?\" đường tiền tố và interop tất cả gọi chính bạn (như. Net không hỗ trợ định dạng tệp này). Xem MSDN: Naming Files, Paths, and Namespaces, How to delete a folder that name ended with a dot (".")?You cannot delete a file or a folder on an NTFS file system volume để biết thêm thông tin.

Đây là câu hỏi có liên quan cho thấy làm thế nào để PInvoke chức năng chấp nhận đường dẫn tập tin dài: c# call Win32 API for long file paths?