2009-10-06 22 views

Trả lời

28

C:filename là đường dẫn hợp lệ và khác với C:\filename. C:filename là tệp filename trong thư mục hiện tại trên ổ đĩa C: trong khi C:\filename là tệp filename trong thư mục gốc của ổ đĩa đó. Rõ ràng họ muốn giữ chức năng của việc tham khảo thư mục hiện tại trên một số ổ đĩa.

Hành vi này được mô tả here trong MSDN

+3

Đây là một tổ chức giao từ DOS 1.x IIRC ... :-) –

+3

Freaky ... đây là unintuitive. Cách để có được giá trị mong đợi là gì? 'Path.Combine (ổ đĩa + @" \ ", đường dẫn)'? – Gishu

+2

@ Gishu - Nó chỉ là không trực quan bởi vì đường dẫn hoạt động trong hệ điều hành Windows không đơn giản như người ta có thể nghĩ. Xem bài viết MSDN mà tôi đã liên kết để tìm mô tả về cách hoạt động của đường dẫn Windows. Path.Combine() kết hợp hai đường dẫn. Tôi sẽ không sử dụng nối chuỗi theo cách bạn đề nghị vì điều đó đánh bại toàn bộ mục đích của Path.Combine(). AFAIC bạn nên cẩn thận theo cách bạn chỉ định đường dẫn của mình. Nếu bạn có nghĩa là "C: \" sử dụng điều đó, nếu OTOH bạn có nghĩa là "C:" (mà là khác nhau nhưng chỉ là hợp lệ) sau đó sử dụng đó. –

5

MSDN dường như không giải thích tại sao, nhưng không cung cấp tài liệu về những gì bạn đang nhìn thấy:

Path.Combine (string path1, chuỗi path2)

Nếu path1 không phải là một ổ đĩa tham chiếu (nghĩa là "C:" hoặc "D:") và không kết thúc bằng một ký tự dấu tách hợp lệ như được định nghĩa trong DirectorySeparatorChar, AltDirectorySeparatorChar hoặc VolumeSeparatorChar, DirectorySeparatorChar được nối vào đường dẫn 1 trước khi nối.

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