У меня есть приложение, которое локализовано для использования по всей Европе.
У меня есть пункт меню, который загружает файл из диска.
Эта операция хорошо работает на моей 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 отображает его как «Debug», то файл найден.
Оказывается, исследователь скрывал расширения файлов известных типов на целевой машине.
FYI --------------------------------------------------- -------------------
Открытый проводник, выберите «Инструменты»> Папки «Папки», затем вкладка «Вид».
Прокрутите вниз и снимите флажок «Скрыть расширения для известных типов файлов».
Может быть, что префикс неверно: C: \ Program Files
Например, для бразильских португальских Windows Установки Windows То, что папка становится «C: \ Arquivos de Programs \»
; Вы должны убедиться, что ваши окна Windows не имеют такой же «функции».
Если этот пример код работает внутри этой папки, вы можете использовать относительный путь.
Вы также можете попытаться использовать empath = "% Programfilesfiles% \ mycompany \ mytool \
Чтобы убедиться, что вы в правильной папке, посмотрите на окружающую среду . Specialfolders
E.G.
string path = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles);
Затем также проверьте разрешения на определенный файл.
Это может быть связано с исключением безопасности, поскольку текущий пользователь, пытающийся прочитать, не имеет достаточного разрешения. Я столкнулся с этим много раз ....
Я бы также попытался использовать
File.Exists()
, прежде чем открывать его. И небольшой совет должен использовать
Path.Combine()
при сочетании 2 частей пути.