2012-03-31 36 views
5

Tôi muốn sử dụng lớp FileStream để tránh lưu bất kỳ tệp nào trên máy tính của khách hàng . Nhưng mọi nhà xây dựng của FileStream đều yêu cầu đường dẫn vào một tệp.Sử dụng FileStream mà không cần tệp thực tế

Làm cách nào để tạo luồng tệp từ luồng và không phải lưu tệp trên ổ cứng?

EDIT: Tôi đã sử dụng bộ nhớ để lưu trữ thông tin của mình. Nhưng tại một số điểm tôi cần phải nén các tệp vào ANREER STREAM. Vấn đề là các lệnh zip (tôi đã nhìn vào GZipStream - Nó nén FILES thành một STREAM) yêu cầu tôi một filePath nguồn (FileStream).

Nếu tôi không thể vượt qua bằng cách tạo luồng tệp từ luồng, có cách nào khác để nén luồng không?

+0

FileStream IS để ghi vào tệp, sử dụng MemoryStream thay vì – Reniuz

+0

Hoàn toàn không chính xác khi nói rằng GZipStream xử lý * tệp *. Nó không. Nó xử lý một luồng byte và không quan tâm đến các tệp nào. Bạn cần phải giải thích kịch bản của bạn nhiều hơn, có lẽ hiển thị chính xác mã muốn có tệp. Bạn có thể sử dụng GZipStream để làm việc với các nguồn/đích đến tùy ý. Bạn thực sự cần phải giải thích những gì bạn đang gặp khó khăn trên. Nếu bạn "nhìn vào GZipStream" và đạt được kết luận đó, thì bạn đã nhìn sai. –

Trả lời

9

Trong trường hợp này, bạn chỉ nên sử dụng MemoryStream và đảm bảo API của bạn chỉ yêu cầu Stream thay vì FileStream cụ thể. Ví dụ:

using(var ms = new MemoryStream()) { 
    YourCode(ms); 
} 

Hoặc bạn có thể tiếp tục sử dụng FileStream bằng cách sử dụng một tập tin trong khu vực tạm thời, qua Path.GetTempFileName().

1

Bạn có thể sử dụng các loại luồng khác (như MemoryStream) hoặc lấy được lớp của riêng bạn từ FileStream sẽ không làm gì (hoặc viết bất cứ nơi nào bạn cần).

0

FileStream hoạt động với các tệp. Bạn không thể thay đổi hành vi này.

Bạn có thể kiểm tra khác * Các lớp học được kế thừa từ System.IO.Stream như MemoryStream.

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