2012-01-05 9 views
19

संभव है बाइट सरणी या स्ट्रीम से फ़ाइल नाम प्राप्त करें? मैं फ़ाइल को सहेजना नहीं चाहता हूं। मैं सिर्फ नाम पुनर्प्राप्त करना चाहता हूं।बाइट सरणी से स्ट्रीम का नाम प्राप्त करें या स्ट्रीम

+0

हाय @ मेकेसी, एक .doc है। – Gus

उत्तर

31

तो Stream वास्तव में एक FileStream है, तो यह उपलब्ध FileStream के कास्टिंग और .Name संपत्ति एक्सेस करके किया जा सकता है नहीं, यह नहीं है उपलब्ध। byte[]निश्चित रूप से में फ़ाइल नाम की कोई अवधारणा नहीं है, न ही अधिकांश अन्य प्रकार की धाराएं। इसी तरह, एक FileStream आधार धारा जो अन्य धाराओं (संपीड़न, एन्क्रिप्शन, बफरिंग इत्यादि) द्वारा लिपटे जा रही है, अंतर्निहित धारा (कई परतें नीचे) फ़ाइल होने के बावजूद ऐसी जानकारी का पर्दाफाश नहीं करेगी।

मैं फ़ाइल नाम को अलग से संभालता हूं।

+0

+1 पहले कभी उस संपत्ति को नहीं देखा, हालांकि मुझे कभी भी इसका उपयोग करने की संभावना नहीं है –

+0

हाय @ मर्क, आपके उत्कृष्ट स्पष्टीकरण के लिए धन्यवाद। मैं परिणाम कोशिश करूँगा और पोस्ट करूंगा। – Gus

+0

हाय, डब्ल्यूसीएफ में मैं एक फाइलस्ट्रीम लौटाता हूं, लेकिन क्लाइंट मुझे संदेशबॉडीस्ट्रीम मिलता है। कोई सुझाव? – Gus

14

नहीं यह संभव नहीं है (ठीक है तो यह FileStream कक्षा पर संभव हो सकता है, हर रोज कुछ नया सीखें!)।

एक बाइट सरणी या धारा सामग्री फ़ाइल का, नहीं विंडोज मेटाडाटा फाइल के बारे में प्रतिनिधित्व करता है।

इस जानकारी को बनाए रखने के लिए बहुत सी सीधी तरीके हैं, लेकिन आपकी स्थिति के बारे में और कुछ नहीं जानते, मैं समाधान नहीं दे सकता।

+0

हाय @ एडम, मैं समझता हूं। आपके सहायक के लिए धन्यवाद। – Gus

4

सभी फ़ाइल जानकारी (जैसे नाम, एक्सटेंशन इत्यादि) वास्तविक फ़ाइल के लिए मेटा डेटा का हिस्सा है। बाइट सरणी केवल वास्तविक डेटा रखेगी। यह संभव हो सकता है यदि बाइट सरणी में मेटा डेटा (उदाहरण के लिए एक एक्सएमएल फ़ाइल) हो ... हालांकि, आपको उस प्रकार को जानना होगा और विशेष रूप से कहां देखना है।

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

हालांकि, सामान्य मामले में :

+0

हाय @ कोड, आपके सहायक के लिए धन्यवाद। – Gus