2010-03-23 6 views
12

मैं एक आवेदन में फ़ाइल अनुलग्नक जोड़ने के लिए कुछ कोड लिख रहा हूं जिसे मैं बना रहा हूं।मैं बाइट्स की सरणी को वापस फाइल में कैसे बदलूं और इसे सी # के साथ स्वचालित रूप से खोलूं?

मैंने & जोड़ दिया है काम करना निकालें लेकिन मुझे नहीं पता कि खुले को लागू करने के लिए कहां से शुरू करना है।

मेरे पास बाइट्स (तालिका फ़ील्ड से) की एक सरणी है और मुझे नहीं पता कि इसे स्वचालित रूप से कैसे खोलें।

यदि मेरे पास बाइट्स की एक सरणी है जो पीडीएफ है, तो मैं अपने ऐप को एक्रोबैट को स्वचालित रूप से खोलने के लिए कैसे प्राप्त करूं या एक्सटेंशन के लिए वर्तमान में निर्दिष्ट एप्लिकेशन सी # का उपयोग कर रहा है?

+1

मुझे लगता है कि यह ASP.NET अनुप्रयोग नहीं है। System.Diagnostics.Process.Start() का उपयोग करने का सबसे आसान तरीका होना चाहिए। http://msdn.microsoft.com/fr-fr/library/system.diagnostics.process.start%28VS.80%29.aspx – JoeBilly

उत्तर

16

में बाहरी एप्लिकेशन में इसे खोलने के लिए, आपको बाइट्स को डिस्क पर लिखना होगा, फिर प्रक्रिया का उपयोग करें। अस्थायी फ़ाइल पर संबंधित एप्लिकेशन लॉन्च करने के लिए प्रारंभ करें। केवल अस्थायी फ़ाइल नाम (उपयुक्त एक्सटेंशन के साथ) को केवल एक ही तर्क के रूप में पास करें। स्टार्ट, और यह उचित फ़ाइल में उस फ़ाइल को खोल देगा।

कुछ अनुप्रयोगों में बाइट्स की स्ट्रीम को खिलाने का एक तरीका हो सकता है, लेकिन इसे स्पष्ट रूप से लक्षित एप्लिकेशन द्वारा संभाला जाना होगा।


नमूना कोड के लिए, आप की तरह कुछ कर सकता है:

byte[] filedata = GetMyByteArray(); 
string extension = GetTheExtension(); // "pdf", etc 

string filename =System.IO.Path.GetTempFileName() + "." + extension; // Makes something like "C:\Temp\blah.tmp.pdf" 

File.WriteAllBytes(filename, filedata); 

var process = Process.Start(filename); 
// Clean up our temporary file... 
process.Exited += (s,e) => System.IO.File.Delete(filename); 
+0

रीड ने जो कहा, उसके अलावा उपयोगकर्ता को ओपन विद सूची के साथ प्रदान करना संभव है खिड़की का डेस्कटॉप जिस तरह से करता है। यहां देखें: http://stackoverflow.com/questions/1002270/how-does-the-os-now-what-to-do-with-a-file-when-the-open-with-option-is-sel –

+0

यह एक बाइट लिखने के लिए भूल गए हैं, सिवाय इसके कि एक इलाज रीड काम करता है! :-) –

+0

@Ace: धन्यवाद - तय। –

3

इसमें कुछ समय

 byte[] bytes = File.ReadAllBytes(@"C:\temp\file.pdf"); 

     string outpath = @"c:\temp\openme.pdf"; 
     File.WriteAllBytes(outpath, bytes); 
     Process.Start(outpath); 

सीधे शब्दों में बाइट [] डिस्क के लिए लिखते हैं मदद मिल सकती है और फिर से इसे चलाता संबंधित आवेदन

+0

पथ.GetTempPath या Path.GetTempFileName का उपयोग करना चाहिए, सी: \ Temp नहीं मानें। –

+0

मुझे लगता है कि वह उस स्थान को प्रतिस्थापित करेगा जिसे वह उपयोग करना चाहिए, सवाल यह था कि दस्तावेज़ को कैसे खोलें। यह एक निश्चित बात नहीं है कि यह एक अस्थायी पथ है, पथ सेटिंग या सहेजने वाले संवाद आदि से आ सकता है। लेकिन अच्छा बिंदु :) – Mikael

0

डेटा को अस्थायी फ़ाइल में लिखें और प्रक्रिया का उपयोग करके इसे खोलें। यह फ़ाइल प्रकार के लिए कॉन्फ़िगर किए गए मानक प्रोग्राम का उपयोग करेगा। (उदाहरण के लिए txt> नोटपैड)

 byte[] b = new byte[]{0x0}; 
     var fileName = "c:\\test.txt"; 
     System.IO.File.WriteAllBytes(fileName, b); 
     System.Diagnostics.Process.Start(fileName); 
0
// get the PDF in byte form from the system 
var bytes = GetFileBytes("Some identifier"); 
// get a valid temporary file name and change the extension to PDF 
var tempFileName = Path.ChangeExtension(Path.GetTempFileName(), "PDF"); 
// write the bytes of the PDF to the temp file 
File.WriteAllBytes(tempFileName, bytes); 
// Ask the system to handle opening of this file 
Process.Start(tempFileName); 
संबंधित मुद्दे