سؤال

لدي تطبيق مترجمة للاستخدام في جميع أنحاء أوروبا.

لدي خيار قائمة يقوم بتحميل ملف من القرص.

تعمل هذه العملية بشكل جيد على جهاز DEV الخاص بي ولكنها لا تعمل على الجهاز الظاهري الذي أستخدمه لاختبار أنظمة التشغيل الأخرى _ على سبيل المثال الفرنسية والإسبانية وما إلى ذلك.

يتم إنشاء FileNotfoundException عندما يحاول StreamReader فتح الملف.

تقول "لا يمكن العثور على ملف C: Program Files MyCompany MyTool Bin Files debug.txt" "

الشيء هو أن الملف موجود ، في الموقع الصحيح ومع اسم الملف الصحيح.

أسماء الدليل على نظام التشغيل الهدف (الفرنسي) هي نفس آلة DEV.

أيه أفكار؟

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);
        }
هل كانت مفيدة؟

المحلول

حسنًا ، وجدت المشكلة.

قرر أن نظام التشغيل كان يقرأ الملف المعروض في Explorer باسم "debug.txt" باسم "debug.txt.txt".

تم تحديد ذلك باستخدام استدعاء إلى System.io.directory.getFiles لسرد الملفات في الدليل الهدف.

إذا قمت بإزالة امتداد .txt بحيث يعرضه Windows Explorer على أنه "تصحيح" ، فسيتم العثور على الملف.

تبين أن Explorer كان يخفي ملحقات الملفات لأنواع معروفة على الجهاز المستهدف.

لعِلمِكَ ------------------------------------------------- -------------

افتح Explorer ، حدد أدوات-> خيارات المجلد ثم علامة التبويب عرض.

قم بالتمرير لأسفل وإلغاء تحديد "إخفاء الامتدادات لأنواع الملفات المعروفة".

نصائح أخرى

للتأكد من أنك في المجلد الصحيح ، انظر إلى Environment.SpecialFolders

على سبيل المثال

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

ثم تحقق أيضًا من الأذونات على الملف المحدد.

سأحاول أيضًا الاستخدام

File.Exists()

قبل فتحه. ونصيحة صغيرة هي الاستخدام

Path.Combine()

عند الجمع بين 2 جزء من المسار.

ربما هذا البادئة خاطئ: C:\Program Files

على سبيل المثال ، بالنسبة لتركيبات Windows البرتغالية البرازيلية ، يصبح المجلد هذا المجلد "C:\Arquivos de Programas\"; ؛ يجب عليك التأكد من أن تثبيتات Windows لا تحتوي على نفس "الميزة".

إذا تم تشغيل رمز العينة داخل هذا المجلد ، فيمكنك استخدام مسار نسبي.

يمكنك أيضًا محاولة استخدام ourPath = "%ProgramFiles%\MyCompany\MyTool\

قد يكون ذلك بسبب استثناء الأمان لأن المستخدم الحالي الذي يحاول القراءة ليس لديه إذن كافٍ. لقد واجهت عدة مرات ....

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top