2014-06-18 15 views
6

तक पहुँचने मैं वर्तमान में filestreams उपयोग कर रहा हूँ कॉपी करने के लिए फ़ाइलों को एक से दूसरे स्थान के लिए फार्म धागा जमा। यह सब कार्य अब तक का इरादा के रूप में जब मैं अचानक problemn कि File.open धागा है कि यह में चल रहा है जमा।File.open लटकी हुई है और जब एक स्थानीय फ़ाइल

FileStream sourceStream = File.Open(filePath, FileMode.Open) 

यह केवल 1 विशिष्ट फ़ाइल (आकार में 3 जीबी) के लिए होता है। दिलचस्प बात यह है कि एक दिन पहले यह सामान्य रूप से काम करता था हालांकि इस फ़ाइल के लिए यह फ़ाइल का आकार नहीं हो सकता है। अगली चीज़ मैंने चेक की थी अगर कुछ प्रकार का अपवाद फेंक दिया गया था कि मुझे पकड़ नहीं है।

मैं आज़माएं/कैच पूरी बात को ब्लॉक (सामान्य रूप से मैं बुला विधि का उपयोग अपवाद को पकड़ने के लिए) और अभी भी एक ही प्रभाव डाल दिया।

  try 
      { 
       FileStream sourceStream = File.Open(filePath, FileMode.Open); 
       sourceStream.Close(); 
      } 
      catch (Exception e) 
      { 
       Console.Write("A"); 
      } 

मैंने यह भी जांच की कि फ़ाइल को पहले से एक्सेस किया जा रहा है या नहीं। तब एक अपवाद फेंक दिया जाता है (अन्य फ़ाइलों के लिए यह परीक्षण किया की तरह के रूप में मैं इस विशिष्ट फ़ाइल के लिए कहा कि यह हमेशा धागा ऊपर लटका हुआ है अब जब मैं इसे खोलने का प्रयास)।

फ़ाइल एक ही फ़ोल्डर में स्थानीय हार्ड ड्राइव और अन्य फ़ाइलों (छोटे यद्यपि) पर स्थित है इस समस्या को नहीं दिखाते।

मैं अब विचारों से बाहर चल रहा हूँ क्या संभावित कारण हो सकता है, मेरे सवाल यह है: क्या इस अप्रत्याशित व्यवहार के लिए संभावित कारणों जा और कैसे वे adverted किया जा सकता है हो सकता है?

संपादित करें: अब यह फिर से काम करता है (बस जब मैं उपयोग करने के लिए प्रक्रिया पर नजर रखने के लिए यह करने की कोशिश की फिर से काम शुरू कर दिया)। तो कुल मिलाकर कोई संकेत नहीं कि घटना के कारण क्या हो सकता है। अगर किसी को यह पता चल जाए कि इसके लिए एक संभावित कारण क्या हो सकता है तो भविष्य में समस्या के संभावित दोहराने से बचने के लिए यह जानना अच्छा होगा।

using (var stream = new BufferedStream(File.OpenRead(filePath), 1024 * 1024)) 
{ 
    //..do calculations 
} 

कौन सा मैं फ़ाइल के संबंध में कुछ हैश गणना करने के लिए उपयोग करें:


नोट के रूप में भी एक सवाल यह File.Open से पहले पाला मैं के साथ एक का उपयोग कर ब्लॉक की है। यह एक फ़ाइल को खोलने के साथ सभी में कोई मुद्दों था (हालांकि बाद में File.Open मुद्दों था)

संपादित करें: मैं सिर्फ sysadmins यहाँ है कि समस्या पर एक नया प्रकाश चमकता से एक जानकारी प्राप्त किया है: प्रणाली एक तरह से इतना है कि पूरी व्यवस्था समय backuped जाता है और फिर ओएस इसके बारे में कोई जानकारी होने wihtout फ़ाइल द्वारा दायर में स्थापित किया गया है। इसका अर्थ यह है कि बैकअप फ़ाइल के मामले में ओएस सोचता है कि यह वहां है और कोई भी इसे तब तक एक्सेस नहीं करता है जब वास्तविकता में वर्तमान में इसका बैकअप लिया जा रहा है (और इस प्रकार बैकअप प्रक्रिया का वर्णन करने के तरीके के अनुसार ओएस के भीतर से पहुंचा जा सकता है। .... क्योंकि ओएस बैकअप के बारे में नहीं जानता है, संसाधनों में हार्ड ड्राइव एक्सेस और टास्क मैनेजर में कुछ भी नहीं दिखाया गया था)। इस प्रकार जानकारी के साथ यह हो सकता है कि ओएस को फ़ाइल तक पहुंचने के बारे में पता नहीं था, इसलिए इसे एक्सेस करने की कोशिश की गई (खुली कमांड के माध्यम से) और इंतजार कर रहा था और हार्ड ड्राइव पढ़ने के लिए इंतजार कर रहा था, जो फ़ाइल में आने के लिए कभी नहीं हुआ क्योंकि यह वास्तविकता में सुलभ नहीं था)। इस प्रकार इसे फ़ाइल के टाइमआउट में भागना पड़ता था।खुला आदेश (अगर मैं sys व्यवस्थापक सही रूप में वहाँ समझा नई infos के साथ वहाँ कम से कम मेरा अनुमान है) नहीं है

tnx

+1

यह संभव नहीं है :) है, लेकिन वास्तव में आप उपयोग कर सकते हैं [है प्रक्रिया मॉनिटर] (http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx) यह देखने के लिए कि यह फ़ाइल खोले जाने पर वास्तव में क्या होता है। –

+0

क्या आपने [बुफर्डस्ट्रीम] (http://msdn.microsoft.com/en-us/library/system.io.bufferedstream.aspx) का उपयोग करने पर विचार किया है? –

+0

मैंने यह भी सोचा था कि ऐसा होने तक असंभव था। एक अपवाद मैं समझ सकता था कि अगर मैं कोशिश/पकड़ याद करता हूं या अगर यह शुरू करने के लिए काम नहीं करता है (अजीब भी होगा लेकिन कम से कम पहले यह समस्या उस दिन काम नहीं करेगा :))। प्रक्रिया मॉनीटर पर एक नज़र डालेंगे tnx – Thomas

उत्तर

0

आप कर रहे हैं पूरी तरह से सुनिश्चित कि ठंड हमेशा File.Open() में होता है?

अपवादों की अनुपस्थिति को देखते हुए ऐसा लगता है कि समस्या निम्न स्तर पर हो सकती है। जब आपने इसका अनुभव किया है तो आपने फ़ाइल को हेक्स संपादक या किसी अन्य टूल के साथ खोलने का प्रयास किया है ताकि यह जांच सके कि यह वास्तव में पूरी तरह से पठनीय है? यह हार्ड ड्राइव के एक निश्चित क्षेत्र तक पहुंच की समस्या हो सकती है।

प्रयास करें, यदि आप केवल पढ़ने के लिए की जरूरत है FileAccess साथ पहुँच मोड निर्दिष्ट करने के लिए-केवल लिखने, आदि

भी देखें BufferedStream की वास्तविक उपयोगिता के this post

+0

file.open के लिए: हाँ 100% निश्चित (मैंने यह सुनिश्चित करने के लिए डीबगर के साथ कुछ बार कोशिश की है कि मुझे पता है कि वास्तव में धागा कहाँ लटकता है और यह कहां होता है)। मेरे पास फाइल-ओपन में शेयर है। वर्तमान में मैं इसका परीक्षण नहीं कर सकता क्योंकि यह फिर से नहीं हुआ (हालांकि sys admins से नई जानकारी के साथ यह काफी संभव है कि बैकअप प्रक्रिया ने ओएस के बिना फ़ाइल को लॉक कर दिया और ओएस और एप्लिकेशन के लिए इंतजार किया फ़ाइल खोलने के लिए फ़ाइल हैंडलर (जिसे उन्होंने अप्रयुक्त के रूप में देखा) और कोई टाइमआउट नहीं था)। – Thomas

1

एक जोड़े को संभावित कारण:

  • आपका एंटीवायरस। वह चीज ओएस में हुक करती है और आई/ओ कार्यों को अपने आप से बदल देती है। जब आप कोई फ़ाइल खोलते हैं, तो यह वास्तव में आपके एप्लिकेशन पर वापस नियंत्रण लौटने से पहले वायरस जांच कर सकता है। आपके पास खराब हस्ताक्षर अपडेट हो सकता था जिसने एवी को अपनी 3 जीबी फ़ाइल पर चेक करने के लिए मजबूर कर दिया था, और बाद के अपडेट से समस्या ठीक हो सकती थी।

  • आपके ड्राइव पर एक खराब क्षेत्र। यह आमतौर पर I/O बहुत खराब प्रदर्शन करता है, लेकिन आपका सिस्टम खराब क्षेत्र को दूसरे स्थान पर स्थानांतरित कर सकता था, इसलिए प्रदर्शन सामान्य हो गया। यह देखने के लिए कि क्या आपके पास खराब क्षेत्र हैं, आप chkdsk /R चला सकते हैं।

  • एक और ऐप जो फ़ाइल को लॉक करता है, हालांकि मैं इस मामले में अपवाद की अपेक्षा करता हूं।

0

आप,

File.Open() FileAccess & fileshare मूल्यों के साथ समारोह के साथ जांच मुझे लगता है कि यह एक फ़ाइल ताला लगा मुद्दा

+0

Yepp ने इसकी जांच की। पहली चीजों में से एक था और कुछ कोशिश भी की जाती है अगर फाइल को पढ़ने या संपादित करने के दौरान फ़ाइल को पढ़ा या लिखने के दौरान क्या होता है। ओपन। इन सभी मामलों में मुझे अपवाद मिलता है। ऊपर वर्णित अजीब घटनाओं में मुझे कोई अपवाद नहीं मिलता है, जब तक कि घटना समाप्त नहीं हो जाती है और फिर यह सब फिर से काम करता है (इसलिए दुख की बात है कि कोई लॉकिंग समस्या मैं refabricate करने में सक्षम हूं) – Thomas

+0

क्या आप कृपया कोड सिस्टम के बाद मूल्य डाल सकते हैं डायग्नोस्टिक्स। स्टॉपवॉच घड़ी = नई प्रणाली। डायग्नोस्टिक्स। स्टॉपवॉच(); घड़ी। स्टार्ट(); { कंसोल.WriteLine (watch.ElapsedTicks) का प्रयास करें; फ़ाइलस्ट्रीम स्रोतस्ट्रीम = फ़ाइल। खोलें (फ़ाइलपैथ, फ़ाइलमोड.ऑपन); कंसोल। राइटलाइन (घड़ी। एप्लाइडटिक्स); स्रोतस्ट्रीम.क्लोज़(); कंसोल। राइटलाइन (घड़ी। एप्लाइडटिक्स); } पकड़ (अपवाद ई) { कंसोल। राइट ("ए"); } –

+0

आपका क्या मतलब है? – Thomas

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