2011-06-04 18 views
5

से फ़ाइल कैसे खोलें डिस्क पर लिखने और Process.Start() करने के विरोध में MemoryStream से सीधे फ़ाइल खोलना संभव है? विशेष रूप से एक पीडीएफ फ़ाइल? यदि नहीं, तो मुझे लगता है कि मुझे डिस्क पर MemoryStream लिखना होगा (जो कि कष्टप्रद है)। क्या कोई मुझे डिस्क पर MemoryStream लिखने के बारे में संसाधन के बारे में बता सकता है?मेमोरी स्ट्रीम

+0

(जेम्स - मैंने अपने उत्तर से 4.0 निर्भरता को हटा दिया) –

उत्तर

7

यह क्लाइंट पर निर्भर करता है :) यदि ग्राहक stdin से इनपुट स्वीकार करेगा तो आप ग्राहक को पुश धक्का दे सकते हैं। एक अन्य संभावना एक नाम-पाइप सर्वर या सॉकेट-सर्वर लिखना हो सकता है - तुच्छ नहीं, लेकिन यह काम कर सकता है।

हालांकि, सबसे आसान विकल्प केवल एक temp फ़ाइल को पकड़ना है और उस पर लिखना है (और बाद में हटाएं)।

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

जब आप पूरा कर लें तो फ़ाइल को साफ़ करना याद रखें।

+0

या 'WriteTo' (गैर 4.0 के लिए) – Magnus

+0

@Magnus का उपयोग करें - मैंने इसे हटा दिया; एहसास हुआ कि मैं मेमोरीस्ट्रीम से बैक-बफर का उपयोग कर सकता हूं –

0

यदि कोई फ़ाइल खोलकर, आपका मतलब पीडीएफ फाइलों के लिए एडोब रीडर शुरू करने जैसा है, तो हाँ, आपको इसे एक फाइल में लिखना होगा। यही है, जब तक कि एप्लिकेशन आपको कुछ एपीआई प्रदान नहीं करता है।

एक तरह से फाइल करने के लिए एक धारा लिखने के लिए होगा:

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

Path.GetTempFileName() '.tmp' विस्तार के साथ फ़ाइल नाम देता है, इसलिए आप Process.Start() की आवश्यकता है का उपयोग cant't एक्सटेंशन के माध्यम से विंडोज फाइल एसोसिएशन।

संबंधित मुद्दे