2011-06-04 35 views
5

Có thể mở tệp trực tiếp từ MemoryStream trái ngược với ghi vào đĩa và thực hiện Process.Start() không? Cụ thể là một tệp pdf? Nếu không, tôi đoán tôi cần phải viết MemoryStream vào đĩa (đó là loại gây phiền nhiễu). Ai đó sau đó có thể chỉ cho tôi một nguồn lực về cách viết một MemoryStream vào đĩa?Cách mở tệp từ Memory Stream

+0

(James - Tôi đã xóa phụ thuộc 4.0 khỏi câu trả lời của mình) –

Trả lời

7

Nó phụ thuộc vào khách hàng :) nếu khách hàng sẽ chấp nhận đầu vào từ stdin bạn có thể đẩy dta cho khách hàng. Một khả năng khác có thể là viết một máy chủ có tên-pipe hoặc một máy chủ socket - không tầm thường, nhưng nó có thể hoạt động.

Tuy nhiên, tùy chọn đơn giản nhất là chỉ cần lấy tệp tạm thời và ghi vào đó (và xóa sau đó).

var file = Path.GetTempFileName(); 
using(var fileStream = File.OpenWrite(file)) 
{ 
    var buffer = memStream.GetBuffer(); 
    fileStream.Write(buffer, 0, (int)memStream.Length); 
} 

Nhớ dọn dẹp tệp khi bạn hoàn tất.

+0

Hoặc sử dụng 'WriteTo' (cho không phải 4.0) – Magnus

+0

@Magnus - tôi đã xóa điều đó; nhận ra rằng tôi có thể sử dụng bộ đệm sau từ MemoryStream –

0

Nếu bằng cách mở một tệp, bạn có nghĩa là một cái gì đó như bắt đầu Adobe Reader cho tệp PDF, sau đó có, bạn phải ghi nó vào một tệp. Tức là, trừ khi ứng dụng cung cấp cho bạn một số API làm điều đó.

Một cách để viết một dòng suối để nộp sẽ là:

using (var memoryStream = /* create the memory stream */) 
using (var fileStream = File.OpenWrite(fileName)) 
{ 
    memoryStream.WriteTo(fileStream); 
} 
1

Path.GetTempFileName() trả về tên tập tin với phần mở rộng '.tmp', do đó bạn cant't sử dụng Process.Start() mà cần cửa sổ tập tin hiệp hội thông qua phần mở rộng.