Сначала написал консольное приложение и теперь пытаюсь перенести в Windows Form. При попытке сделать действие кнопки не видит переменную

Рейтинг: 0Ответов: 1Опубликовано: 22.02.2023
void DataReading(Data1* (&d), int& n, string FileName)
{
    //Поток зчитування
    ifstream reading(FileName);

    if (reading)
    {
        Marc marca;
        Date date;
        Fuel fuel;
        Сondition condition;
        Price price;

        reading >> n;
        d = new Data1[n];

        for (int i = 0; i < n; i++)
        {
            reading >> marca.marca;
            reading >> date.day >> date.month >> date.year;
            reading >> fuel.in >> fuel.out;
            reading >> condition.condition;
            reading >> price.prices;

            d[i].DataEntry(marca, date, fuel, condition, price);
        }

        MessageBox::Show("Open");
    }
    else
        MessageBox::Show("Error");

    reading.close();
}


System::Void CursGraf::MyForm::відкритиToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e)
{

    OpenFileDialog^ openDlg = gcnew OpenFileDialog();
    openDlg->Filter = "Text Files(*.txt;|*.txt;|All files (*.*)|*.*";
    if (DialogResult == openDlg->ShowDialog())
    {
        String^ fileName = openDlg->FileName;
    }
    DataReading(d, _size, FileName); <---- Не видит FileName
    
    return System::Void();
}

С Windows Form до этого не работал и знаю про него крайне мало, помогите подключить чтение файла либо расскажите что именно не так и где найти информацию как правильно. По такой проблеме не нашёл нечего, возможно плохо искал но уже второй день застрял на этом моменте

Ответы

▲ 0Принят
#include <msclr\marshal_cppstd.h>

if (DialogResult == openDlg->ShowDialog())
{
    String^ fileName = openDlg->FileName;
    DataReading(d, _size, 
       msclr::interop::marshal_as<std::string>(fileName));
}

См. также: преобразование String в std::string: https://stackoverflow.com/questions/946813/c-cli-converting-from-systemstring-to-stdstring