2010-01-27 17 views
12

है मेरे पास एक ऐसा एप्लिकेशन है जो पूरे यूरोप में उपयोग के लिए स्थानीयकृत है।StreamReader शिकायत करता है कि फ़ाइल मौजूद नहीं है, लेकिन यह

मेरे पास एक मेनू विकल्प है जो डिस्क से फ़ाइल लोड करता है।

इस आपरेशन मेरे देव मशीन पर ठीक काम करता है, लेकिन आभासी मशीन पर काम नहीं करता मैं अन्य ऑपरेटिंग सिस्टम का परीक्षण करने _ जैसे फ्रेंच, स्पेनिश आदि

एक FileNotFoundException उत्पन्न होती है जब StreamReader फ़ाइल को खोलने की कोशिश करता है का उपयोग करें ।

यह कहते हैं, " 'फ़ाइल सी नहीं मिल सका: \ Program Files \ MyCompany \ MyTool \ बिन \ Files \ debug.txt'"

बात है, फ़ाइल सही स्थान पर और साथ मौजूद है, सही फ़ाइल नाम।

लक्ष्य (फ़्रेंच) ऑपरेटिंग सिस्टम पर निर्देशिका नाम देव मशीन के समान हैं।

कोई विचार?

string ourPath = System.IO.Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName); 

      try 
     { 
      System.IO.StreamReader sr = System.IO.File.OpenText(ourPath + @"\bin\Files\debug.txt"); 
      string input = null; 
      while ((input = sr.ReadLine()) != null) 
      { 
       m_text.Append(input); 
      } 
      sr.Close(); 
     } 
     catch (System.IO.FileNotFoundException) 
     { 
      MessageBox.Show("LoadDebugOptions: File Not Found: " + ex.Message); 
     } 
+0

फ़ाइल मौजूद है या नहीं, यह सत्यापित करने के लिए फ़ाइल.इक्सिस्ट विधि का उपयोग करने का प्रयास करें। – Faisal

उत्तर

27

ठीक है समस्या मिली।

निर्धारित किया गया है कि ऑपरेटिंग सिस्टम एक्सप्लोरर में "debug.txt" के रूप में "debug.txt.txt" के रूप में प्रदर्शित फ़ाइल पढ़ रहा था।

यह लक्ष्य निर्देशिका में फ़ाइलों को सूचीबद्ध करने के लिए System.IO.Directory.GetFiles पर कॉल का उपयोग करके निर्धारित किया गया था।

यदि मैं .txt एक्सटेंशन को हटा देता हूं ताकि विंडोज एक्सप्लोरर इसे "डीबग" के रूप में प्रदर्शित कर सके तो फ़ाइल पाई जाती है।

एक्सप्लोरर लक्ष्य मशीन पर ज्ञात प्रकारों के फ़ाइल एक्सटेंशन छुपा रहा था।

एफवाईआई ------------------------------------------- ---------------------

ओपन एक्सप्लोरर, टूल्स-> फ़ोल्डर विकल्प फिर टैब देखें।

नीचे स्क्रॉल करें और "ज्ञात फ़ाइल प्रकारों के लिए एक्सटेंशन छुपाएं" अनचेक करें।

+0

धन्यवाद - मेरी समस्या हल हो गई। –

1

हो सकता है कि उपसर्ग गलत है: C:\Program Files

उदाहरण के लिए, ब्राजीली पुर्तगाली विंडोज प्रतिष्ठानों उस फ़ोल्डर "C:\Arquivos de Programas\" हो जाता है के लिए; आपको यह सुनिश्चित करना चाहिए कि आपके विंडोज़ इंस्टॉलेशन में "फीचर" नहीं है।

यदि वह नमूना कोड उस फ़ोल्डर के अंदर चलाता है, तो आप एक सापेक्ष पथ का उपयोग कर सकते हैं।

तुम भी वर्तमान उपयोगकर्ता को पढ़ने के लिए पर्याप्त अनुमति नहीं है की कोशिश कर के रूप में ourPath = "%ProgramFiles%\MyCompany\MyTool\

1

उपयोग करने के लिए यह सुरक्षा अपवाद के कारण हो सकता कोशिश कर सकते। मैं कई बार है कि सामना करना पड़ा ....

5

Environment.SpecialFolders

जैसे देखो सुनिश्चित करें कि आप सही फ़ोल्डर में नहीं हैं,

string path = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles); 

फिर विशिष्ट फ़ाइल पर अनुमतियां भी जांचें।

+0

दुर्भाग्यवश मैं इस तरह से एक स्पष्ट फ़ोल्डर का उपयोग नहीं कर सकता, क्योंकि अंतिम उपयोगकर्ता एप्लिकेशन को कहीं और इंस्टॉल कर सकता है। यही कारण है कि मुझे निर्देशिका पथ कहाँ से स्थापित किया गया है (संपादन देखें)। इसके अलावा, मैंने जांच की है कि फ़ोल्डर को लक्ष्य मशीन पर प्रोग्राम फ़ाइलें कहा जाता है। – Kildareflare

4

मैं भी खोलने से पहले

File.Exists() 

उपयोग करने के लिए कोशिश करेंगे। और

Path.Combine() 

पथ के 2 भागों को संयोजित करने के लिए एक छोटी सी सलाह है।

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

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