2010-07-15 17 views
7

में पथ। गेटटेम्फफ़ाइलनाम हम एक ही कंप्यूटर पर हमारे प्रोग्राम (सी #) के कई उदाहरण चलाते हैं। प्रत्येक उदाहरण में हमारा कोड विधि Path.GetTempFile() की सहायता से "कई" अस्थायी फ़ाइलों को बनाने का प्रयास करता है।मल्टीप्रोसेसिंग

Exception: Access to the path is denied. 
StackTrace: at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) 
    at System.IO.Path.GetTempFileName() 

मैं अस्थायी फ़ोल्डर की जाँच की और कुछ अजीब नहीं मिला: मुक्त डिस्क के लिए पर्याप्त है, अस्थायी फ़ाइलों की संख्या बहुत बड़ी नहीं है, आदि

मैं और कभी-कभी, हमारे कार्यक्रम अपवाद के साथ विफल रहता है केवल एक स्पष्टीकरण है: एक उदाहरण अस्थायी फ़ाइल प्राप्त करता है और इसे खोलता है, लेकिन साथ ही, एक और उदाहरण भी अस्थायी फ़ाइल का नाम प्राप्त करता है और इसे खोलने का प्रयास करता है। यदि यह सही है? यदि हां, तो समस्या को हल करने के लिए, यदि कोई समस्या नहीं है तो कैसे समझें?

युपीडी: विंडोज सर्वर 2008 एचपीसी

धन्यवाद, इगोर के साथ कंप्यूटर पर विफल रही है। Path वर्ग के लिए

+0

मुझे लगता है कि संभावना नहीं है। यदि 'GetTempFileName' विधि थ्रेड-सुरक्षित नहीं थी या एक अच्छी तरह से यादृच्छिक नाम उत्पन्न नहीं किया गया था, तो यह वहां नहीं होगा। ऐसा नहीं है कि मुझे पता है कि सटीक कारण क्या है ... – Noldorin

+0

जो कारण आपको लगता है उसे खत्म करने के लिए, केवल एक * अगर (निर्देशिका। एक्सिस्टिस्ट्स (myTempFolderName)) * को अस्थायी फ़ोल्डर बनाने से पहले - यदि यह मौजूद है तो एक उत्पन्न करें नया नाम। – slugster

+0

आपका मतलब है, Path.GetTempFileName() का उपयोग करना अच्छा अभ्यास नहीं है? यदि विधि "बहु थ्रेड या प्रक्रिया सहेजने" नहीं है तो हम इसका उपयोग कैसे कर सकते हैं? जब मुझे किसी विशेष एक्सटेंशन के साथ अस्थायी फ़ोल्डर की आवश्यकता होती है, तो मैं ग्रिड का उपयोग अद्वितीय फ़ाइल नाम के लिए करता हूं। – constructor

उत्तर

4

msdn कहता है:

किसी भी सार्वजनिक स्थिर इस प्रकार के सदस्यों (विजुअल बेसिक में साझा) धागा सुरक्षित हैं।

Furthermore वहाँ दो आईओ अपवाद के लिए दिए गए कारण हैं:

  1. GetTempFileName विधि अगर यह पिछले अस्थायी फ़ाइलों को हटाने के बिना एक से अधिक 65535 फ़ाइलें बनाने के लिए प्रयोग किया जाता है एक IOException बढ़ा देंगे।

  2. GetTempFileName विधि IOException उठाएगी यदि कोई अद्वितीय अस्थायी फ़ाइल नाम उपलब्ध न हो। इस त्रुटि को हल करने के लिए, सभी अनएडेड अस्थायी फ़ाइलों को हटाएं।

मैं इस स्थिति के लिए जाँच करने के लिए (जब से तुम स्पष्ट रूप से यह है कि आप कई अस्थायी फ़ाइलों को बनाने) की सलाह देते हैं।

+0

मैंने विंडोज़ अस्थायी फ़ोल्डर की जांच की। मुझे फ़ोल्डर में 1000 से अधिक फाइलें नहीं मिलीं।हमारे मामले में "बहुत से" इसका मतलब है कि 200-300 अस्थायी फ़ाइलें (पूरी तरह से) जब सभी उदाहरण काम करना शुरू कर देते हैं। जैसा कि मैं समझता हूं "थ्रेड सुरक्षित" "बहु प्रक्रिया सहेजने" के बराबर नहीं है। हमारे पास कई उदाहरण हैं (प्रक्रियाएं, धागे नहीं)। – constructor

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