Вопрос

У меня есть приложение, которое локализовано для использования по всей Европе.

У меня есть параметр меню, который загружает файл с диска.

Эта операция отлично работает на моей Dev Machine, но не работает на виртуальной машине, которую я использую для тестирования других операционных систем _ Например, французский, испанский и т. Д.

FilenotFoundException генерируется, когда StreamReader пытается открыть файл.

В нем говорится: «Не удалось найти файл c: program files mycompany mytool bin files debug.txt '»

Дело в том, что файл существует, в правильном месте и с правильным именем файла.

Названия каталогов в операционной системе Target (французский) такие же, как у машины 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