none
Ошибка приложения WindowsForm C# RRS feed

  • Вопрос

  • Доброго времени суток.

    Останавливается выполнение приложения WindowsForm написанное на C#.Конкретной ошибки нет.

    Пишется что приложение будет закрыто.
    После запуска приложения....,выбора места хранения файла через компонент "SaveDialog" продолжаетя
    выполнение программного кода. В результате файл должен быть сохранен в директорию
    которая была выбрана через "SaveDialog".
    Проблем на компьютере(Windows 10), где установлена Visual Studio Community 2015, нет.
    Файл как положено сохраняется в ту директорию которую я выбрал.
    В режиме "DEBUG","RELEASE" проблем нет. Отдельно копирую релизную сборку с конфигурационными файлами
    в любую директорию проблем нет. Установил виртуальную машину с Windows 10, на ней тоже проблем нет.

    Есть проблема на windows XP SP3. Проверял на двух компьютерах.
     Для работы с текстовыми файлами использую классы StreamReader и StreamWriter.
    Для указания пути к конфигурационных текстовым файлам использую свойство "BaseDirectory"
    класса "AppDomain". Текстовый файл, который я хочу сохранить успевает создатся пустым.
    Если перед тем как запустить программу скопировать два конфигурационных текстовых файла,
    в директорию куда сохраняю файл,то проблема исчезает.
    Эти два файла обязательно нужны, но получается так что программа их пытается найти в другой директории, а не в родной где они лежат.
    В чем может быть проблема? Повторюсь на Windows 10 проблем нет. 

Ответы

  • Получилось. В нес изменения.

    В одном месте закоментировал неспользуемые строки:

    13 строка       //public int countReadLineXXXXXXX;
    64 строка       //countReadLineXXXXXXX = System.IO.File.ReadAllLines("XXXXXXX.txt").Length;
    253 строка      //string directory = AppDomain.CurrentDomain.BaseDirectory;
    255 строка      //System.IO.StreamReader fieldNE = new System.IO.StreamReader(directory+"XXXXXXX.txt");

     в другом месте добавил:

    string directory = AppDomain.CurrentDomain.BaseDirectory;
    countReadLineDEFAULT_TTX_NE = System.IO.File.ReadAllLines(directory + "XXXXXXX.txt").Length;

    В третьем месте добавил:

    158 строка            string directory = AppDomain.CurrentDomain.BaseDirectory;
    159 строка            System.IO.StreamReader CreateDB = new System.IO.StreamReader(directory + "CDR.txt");

    Теперь работает  и на Windows XP нормально.

Все ответы

  • Получилось. В нес изменения.

    В одном месте закоментировал неспользуемые строки:

    13 строка       //public int countReadLineXXXXXXX;
    64 строка       //countReadLineXXXXXXX = System.IO.File.ReadAllLines("XXXXXXX.txt").Length;
    253 строка      //string directory = AppDomain.CurrentDomain.BaseDirectory;
    255 строка      //System.IO.StreamReader fieldNE = new System.IO.StreamReader(directory+"XXXXXXX.txt");

     в другом месте добавил:

    string directory = AppDomain.CurrentDomain.BaseDirectory;
    countReadLineDEFAULT_TTX_NE = System.IO.File.ReadAllLines(directory + "XXXXXXX.txt").Length;

    В третьем месте добавил:

    158 строка            string directory = AppDomain.CurrentDomain.BaseDirectory;
    159 строка            System.IO.StreamReader CreateDB = new System.IO.StreamReader(directory + "CDR.txt");

    Теперь работает  и на Windows XP нормально.

  • "Конкретной ошибки нет.Пишется что приложение будет закрыто."

    Надпись "приложение будет закрыто" выводится при возникновении необработанного исключения. Если хотите получать информацию об ошибке, необходимо обрабатывать исключения.

    "но получается так что программа их пытается найти в другой директории, а не в родной где они лежат"

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

    В целом пользоваться относительными путями не криминально. Это даже приветствуется, так как предоставляет пользователю больший контроль. Главное следить, чтобы текущая директория не сбивалась. А вот почему поведение отличается между разными версиями ОС, понятия не имею. 

    • Предложено в качестве ответа Y_VS 24 мая 2018 г. 18:31