Подтвердить что ты не робот

StreamReader жалуется, что файл не существует, но он делает

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

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

Эта операция отлично работает на моей машине 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);
        }
4b9b3361

Ответ 1

Хорошо, нашел проблему.

Определено, что операционная система читает файл, отображаемый в проводнике, как "debug.txt" как "debug.txt.txt".

Это было определено с помощью вызова System.IO.Directory.GetFiles для отображения файлов в целевом каталоге.

Если я удалю расширение .txt, чтобы проводник Windows отображал его как "debug", тогда файл найден.

Оказывается, что проводник скрывал расширения файлов известных типов на целевой машине.

FYI ---------------------------------------------- ------------------

Откройте "Проводник", выберите "Инструменты" - "Параметры папки", затем вкладку "Вид".

Прокрутите вниз и снимите флажок "Скрыть расширения для известных типов файлов".

Ответ 2

Чтобы убедиться, что вы находитесь в правильной папке, посмотрите Environment.SpecialFolders

например.

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

Затем также проверьте разрешения для конкретного файла.

Ответ 3

Я бы также попытался использовать

File.Exists()

перед тем, как открыть его. И небольшой совет - использовать

Path.Combine()

При объединении двух частей пути.

Ответ 4

Возможно, этот префикс неверен: C:\Program Files

Например, для бразильских португальских установок Windows эта папка становится "C:\Arquivos de Programas\"; вы должны убедиться, что ваши установки Windows не имеют такой же "функции".

Если этот образец кода работает внутри этой папки, вы можете использовать относительный путь.

Вы также можете попробовать использовать ourPath = "%ProgramFiles%\MyCompany\MyTool\

Ответ 5

Возможно, это связано с исключением безопасности, поскольку текущий пользователь, пытающийся прочитать, не имеет достаточного разрешения. Я встречал это много раз....