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);
        }
12
задан Kildareflare 27 January 2010 в 12:36
поделиться

5 ответов

ОК нашел проблему.

Установлено, что операционная система читала файл, отображаемый в Explorer, как «Debug.txt» как «Debug.txt.txt».

Это было определено, используя вызов System.io.directory.GetFiles, чтобы перечислить файлы в целевом каталоге.

Если я удаляю расширение .txt, чтобы Windows Explorer отображает его как «Debug», то файл найден.

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

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

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

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

29
ответ дан 2 December 2019 в 03:43
поделиться

Может быть, что префикс неверно: C: \ Program Files

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

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

Вы также можете попытаться использовать empath = "% Programfilesfiles% \ mycompany \ mytool \

1
ответ дан 2 December 2019 в 03:43
поделиться

Чтобы убедиться, что вы в правильной папке, посмотрите на окружающую среду . Specialfolders

E.G.

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

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

5
ответ дан 2 December 2019 в 03:43
поделиться

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

1
ответ дан 2 December 2019 в 03:43
поделиться

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

File.Exists()

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

Path.Combine()

при сочетании 2 частей пути.

4
ответ дан 2 December 2019 в 03:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: