2009-03-20 41 views
14

Trong mã mới của tôi, tôi không phải sử dụng chuỗi để chuyển đường dẫn thư mục hoặc tên tệp. Thay vào đó tôi đang sử dụng DirectoryInfo và FileInfo vì chúng dường như đóng gói rất nhiều thông tin.Lý do tốt để chuyển đường dẫn dưới dạng chuỗi thay vì sử dụng DirectoryInfo/FileInfo

Tôi đã thấy rất nhiều mã sử dụng chuỗi để chuyển thông tin thư mục, sau đó họ "tách" và "giữa" và "công cụ" trong các câu lệnh không thể hiểu được lâu cho đến khi họ nhận được một phần của thư mục họ đang tìm kiếm.

Có lý do nào tốt để chuyển đường dẫn dưới dạng chuỗi không?

Trả lời

10

Nói chung, tôi nghĩ việc giữ thông tin trong FileInfo/DirectoryInfo tốt hơn. Có rất nhiều chức năng hữu ích trong các lớp này, cũng như rất nhiều sự an toàn liên quan đến việc kiểm tra sự tồn tại của tệp dễ dàng hơn nhiều, xem tệp được chỉ định ban đầu, v.v.

Nơi duy nhất tôi sẽ (có khả năng) vượt qua một con đường như một chuỗi thay vì sử dụng FileInfo và DirectoryInfo nếu đường dẫn sẽ được chuyển qua AppDomains hoặc giữa các quá trình, vv. tái Serializable), nhưng họ có một số tiền công bằng hơn trong tình huống này. Nếu mọi thứ đang đi lại rất nhiều, nó có thể có tác động.

Tôi sẽ gắn bó với FileInfo và DirectoryInfo trong trường hợp này, tuy nhiên, trừ khi tôi thấy rằng có sự cố đáng chú ý trong quá trình lược tả của tôi và tôi đang cố gắng giảm số lượng dữ liệu được tuần tự hóa. Nếu tôi không gặp vấn đề về hiệu năng, tôi sẽ sử dụng các lớp này vì chúng cung cấp rất nhiều tính năng và an toàn.

+0

Lưu ý rằng bạn sẽ cần tạo một FileInfo/DirectoryInfo mới nếu tệp đã thay đổi thời gian tồn tại hoặc dấu thời gian đã sửa đổi của nó. – sighol

4

Khi đường dẫn nằm trong ứng dụng (nghĩa là không nằm trong tệp cấu hình văn bản thuần túy), không, không có lý do chính đáng.

Thời gian duy nhất (tôi có thể nghĩ đến) nó có thể hữu ích là khi tương tác với mã chỉ chấp nhận đường dẫn dưới dạng chuỗi.

5

DirectoryInfo và FileInfo quá nặng để đi qua nếu tất cả những gì bạn cần là đường dẫn. Tôi muốn được quan tâm nhiều hơn về "tách và giữa và instr" rác. Học tập đường lối:

Path.GetFileName
Path.GetDirectoryName
Path.Combine
vv ...

Đó là những từ lớp System.IO.Path, btw.

+0

Hãy nhớ rằng, khi bạn truyền một thể hiện vào một hàm, nó sẽ chuyển một bản sao của tham chiếu chứ không phải là một bản sao của toàn bộ đối tượng! Vì vậy, tất cả các bạn thực sự đi qua là bản sao của một con trỏ ... –

+0

Tôi tin rằng vấn đề không phải là có bao nhiêu byte được truyền xung quanh, mà là chi phí của việc sử dụng FileInfo/DirectoryInfo, mà phải thăm dò tệp theo nhiều cách khác nhau để lưu trữ thông tin về nó. –

+1

Nhưng trước tiên hãy tối ưu hóa để dễ đọc. –

0

Tôi đã gặp sự cố khi chuyển FileInfo sang DMZ. Theo như tôi có thể thấy - sửa tôi nếu tôi sai - FileInfo thực hiện kiểm tra quyền khi deserializing và điều đó sẽ không làm việc từ DMZ và kết quả trong 'con đường không tìm thấy'. Tạo và chuyển một đối tượng tùy chỉnh với dữ liệu mà bạn thay thế.

0

Tôi nghĩ bạn cần một lớp để đóng gói một đường dẫn tệp hoặc thư mục, thay vì sử dụng chuỗi thô và thao tác chúng bằng cách sử dụng lớp System.IO.Path tĩnh. Tuy nhiên, I don't find DirectoryInfo and FileInfo suitable, vì chúng dường như được dự định nhiều hơn để thực hiện thao tác tệp/thư mục thay vì hoạt động của đường dẫn. Nếu bạn tạo một lớp tùy chỉnh cho thao tác đường dẫn, bạn có thể cung cấp more user friendly path manipulation functionality.

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