Дочерняя форма не может найти текстовый файл - PullRequest
0 голосов
/ 23 февраля 2019

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

public partial class Expression_Equivalency_Form : Expression_Simplifier

Однако, когда я нажимаю на конструктор форм, появляется эта ошибка, и я не могу просмотреть графический интерфейс формы:

"Не удалось найти файл Путь к файлу"

Файл находится в папке отладки, которая находится в папке bin в папке, содержащей программу, и входит в родительский класс.Файл читается и добавляется родительской формой без проблем.Я пытался исследовать это, но не смог найти решение.Кто-нибудь знает один?

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

File.WriteAllLines("PreviousExpressionInputs.txt", 
  File.ReadAllLines("PreviousExpressionInputs.txt").Where(l => !string.IsNullOrWhiteSpace(l)));

Код, который пишет в файл:

using (BinaryWriter Writer = new BinaryWriter(File.Open("PreviousExpressionInputs.txt", 
    FileMode.Append)))
{
    Writer.Write(expressionandanswertowritetotextfile);                    
}

Код, который читает из файла:

foreach (string line in File.ReadLines("PreviousExpressionInputs.txt"))
{
    try
    {
        LinesInFile.Add(line);
    }
    catch (Exception)
    {
    }
}

1 Ответ

0 голосов
/ 23 февраля 2019

Примите во внимание следующие факты:

  • Когда вы открываете форму в режиме конструктора, запускается конструктор ее базового класса.
  • Когда вы ищете относительное имя файла,путь будет определен относительно текущего рабочего каталога приложения.
  • Когда форма находится в режиме разработки, текущим приложением является Visual Studio, а его рабочий каталог находится там, где расположен devenv.exe.

Описывает, почему вы не можете найти свои текстовые файлы.Поскольку у вас есть код в конструкторе базовой формы (или пример обработчика события загрузки базовой формы), который ищет файл и, поскольку имя файла является относительным, он ищет файл в рабочем каталоге Visual Studio и не можетнайти файл.

Как предотвратить проблему?Проверьте свойство DesignMode, чтобы предотвратить запуск кода:

public partial class MyBaseForm : Form
{
    public MyBaseForm()
    {
        InitializeComponent();
    }

    private void MyBaseForm_Load(object sender, EventArgs e)
    {
        MessageBox.Show("This will show both in run-time and design time.");

        if (!DesignMode)
            MessageBox.Show("This will show just in run-time");
    }
}

Создайте производную форму и откройте ее в конструкторе, чтобы увидеть, что происходит:

public partial class Form1 : MyBaseForm
{
    public Form1()
    {
        InitializeComponent();
    }
}

Чтобы узнать больше о том, как работает дизайнервзгляните на этот пост .

...