2013-05-03 5 views
8

मैं एक .NET लाइब्रेरी फ़ंक्शन का उपयोग कर रहा हूं जो सर्वर पर फ़ाइलों को अपलोड करता है, और पैरामीटर को फ़ाइल के पथ के रूप में लेता है। जो डेटा मैं भेजना चाहता हूं वह रनटाइम पर छोटा और बनाया गया है। मैं इसे एक अस्थायी फ़ाइल में सहेज सकता हूं और फिर इसे अपलोड कर सकता हूं।मेमोरी में फ़ाइल बनाएं फाइल नहीं

चूंकि मेरा आवेदन विभिन्न वातावरणों में तैनात किया जाएगा, और मुझे नहीं पता कि मैं अस्थायी फ़ाइल को विश्वसनीय रूप से बनाने में सक्षम हूं या नहीं, यह वर्चुअल के पथ में पारित करने में सक्षम होना बेहतर होगा स्मृति में फ़ाइल।

मैं पुस्तकालय नहीं बदल सकता; मुझे पता है कि यह फ़ाइल पर निम्नलिखित निष्पादित करता है:

LibraryUploadFunction(string filename) { 
    fileName = Path.GetFullPath(fileName); 
    FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read); 
    ... 
} 

क्या डिस्क को फ़ाइल लिखने से बचना संभव है?

धन्यवाद

संपादित करें:

पुस्तकालय कॉल Webclient.UploadFile है, के रूप में जवाब में बताया, वहाँ कई संभावित समाधानों, वैकल्पिक लाइब्रेरी का उपयोग कर सहित कई देखते हैं जिनमें से कर रहे हैं।

+0

कौन सी लाइब्रेरी है? – JDB

+0

मैं क्रिंग करता हूं जब लाइब्रेरी निष्क्रिय रूप से डिस्क पर फ़ाइलों के साथ काम करता है। एक फ़ाइल बाइट्स का नामित अनुक्रम है, इसलिए सभी चीजों के नाम पर पवित्र, नाम के लिए एक धारा और एक स्ट्रिंग स्वीकार करें। –

उत्तर

10

नहीं, आपकी लाइब्रेरी मूल रूप से इस पहलू में लचीला है, इस तथ्य से कि यह FileStream का उपयोग करता है।

विकल्प:

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

पुस्तकालय किसी अन्य विधि को उजागर करता एक Stream स्वीकार करने हैं, तो आप एक MemoryStream इस्तेमाल कर सकते हैं।

यदि यह SafeFileHandle स्वीकार करता है, तो आप MemoryMappedFile का उपयोग कर सकते हैं।

अन्यथा, आपको डिस्क पर एक फ़ाइल से संतुष्ट होना होगा।

2

यदि मैं आपको सही ढंग से समझता हूं, तो आप अन्य WebClient.Upload* विधियों में से एक का उपयोग करना चाहते हैं। उदाहरण के लिए, यदि आपके पास byte[] में आपका डेटा है, तो UploadData का उपयोग करें।

एक और विकल्प, यदि आप स्ट्रीम के रूप में डेटा अपलोड करना चाहते हैं तो OpenWrite का उपयोग करना है।

+0

मैंने अपलोडस्ट्रिंग का प्रयास किया, और अब मैंने अपलोडडेटा को आजमाया है। दोनों ने सर्वर को रीबूट करने के लिए संचार कर रहा था :-(। मैं POST के प्रारूप में खोद सकता हूं कि वेब क्लाइंट यह पता लगाने के लिए बनाता है कि समस्या कहां है, लेकिन यह वेब क्लाइंट जैसे सरल http क्लाइंट का उपयोग करने के उद्देश्य को हरा देगा। अस्थायी फ़ाइलें यह है! – Stefan

+0

@Stefan यह आपके सर्वर को * रीबूट * करने का कारण बनता है? फिर आपके सर्वर के साथ कुछ गड़बड़ है और आपको यह पता लगाना चाहिए कि यह क्या है। – svick

+0

हे ... यह "मेरा" सर्वर नहीं है।यह एक नेटवर्क एम्बेडेड डिवाइस से जुड़ा हुआ है, जो मेरे नियंत्रण से बाहर है। मैदान में इन हजारों चीजें हैं। इतना पसंद है कि मैं इसे पसंद प्रारूप में अनुरोध भेजने के साथ अटक गया हूँ। कम से कम मुझे सफलतापूर्वक डेटा प्राप्त करने के एक तरीके से पता है, इसलिए मैं इसके साथ रह सकता हूं! – Stefan

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