2012-01-05 26 views

Trả lời

31

Nếu Stream thực sự là một FileStream, sau đó này có thể có sẵn bằng cách đúc để FileStream và truy cập vào .Name tài sản:

Stream stream = ... 
FileStream fs = stream as FileStream; 
if(fs != null) Console.WriteLine(fs.Name); 

Tuy nhiên, trong trường hợp chung: không, đây không phải là có sẵn. A byte[]chắc chắn không có khái niệm về tên tệp cũng như hầu hết các loại luồng khác. Tương tự, luồng cơ sở FileStream đang được bao bọc bởi các luồng khác (nén, mã hóa, lưu vào bộ đệm, v.v.) sẽ không hiển thị thông tin như vậy, mặc dù luồng bên dưới (một vài lớp xuống) là một tệp.

Tôi sẽ xử lý riêng tên tệp.

+0

+1 Không bao giờ phát hiện ra tài sản đó trước đây, mặc dù tôi không có khả năng sử dụng nó lol –

+0

Xin chào @Marc, cảm ơn lời giải thích tuyệt vời của bạn. Tôi sẽ thử và đăng kết quả. – Gus

+0

Xin chào, Trong wcf tôi trả về một FileStream, nhưng khách hàng tôi nhận được một MessageBodyStream. Bất kỳ đề xuất? – Gus

14

Không thể thực hiện điều này (ok để có thể thực hiện được ở lớp FileStream, học điều gì đó mới mỗi ngày!).

Một mảng byte hoặc dòng đại diện cho nội dung của tập tin, không Windows metadata về các tập tin.

Có rất nhiều cách đơn giản để giữ lại thông tin này, nhưng không biết nhiều hơn về tình huống của bạn Tôi không thể đưa ra giải pháp.

+0

Xin chào @Adam, tôi hiểu. Cảm ơn sự giúp đỡ của bạn. – Gus

4

Tất cả thông tin tệp (chẳng hạn như tên, tiện ích mở rộng, v.v.) là một phần của dữ liệu meta cho tệp thực. Mảng byte sẽ chỉ giữ dữ liệu thực tế. Nó có thể là có thể nếu mảng byte chính nó chứa dữ liệu meta (ví dụ một tập tin xml) ... tuy nhiên, bạn cần phải biết loại và cụ thể nơi để tìm.

+0

Xin chào @Code, Cảm ơn sự giúp đỡ của bạn. – Gus

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