我有两个程序一起工作以从文件中写入和读取数据。
第一个程序是一个 C# 表单。它从用户那里获取文件名并将其写入 C 驱动器上的文件并退出/关闭 C# 应用程序。
相关代码:
private void startBtn_Click(object sender, System.EventArgs e)
{
using (StreamWriter writer = new StreamWriter("C:\\File.txt"))
{
writer.WriteLine(fileName.Text + ".txt");
writer.Close();
}
Application.Exit();
}
C++ 中的第二个程序。该程序仅在按下 f10 时创建 C# 应用程序,然后停止直到 C# 应用程序关闭。然后 C++ 程序恢复并读入写入 C 驱动器上文件的文件名。C++ 程序是高度专业化/定制的,必须小心处理对其的添加。
相关代码:
std::string path("C:\\CSharpApp.exe");
system(path.c_str()); //Halts here until CSharpApp exits
if(!reader.is_open()) //Reader is a global ifstream object
{
reader.open("C:\\File.txt");
}
char temp[MAX_FILE_NAME];//250
reader >> temp;
reader.close();
string temp2 = temp;
//cout << temp2 << endl; //Using to debug
FileName = "C:\\data\\" + temp2;//temp2 contains a file name ending with .txt
if(!writer.is_open())//Writer is a global ofstream object
{
writer.open(FileName.c_str(),ios::app);
}
//write some stuff to file
writer.close();
第一次按 f10 键会调用 C++ 代码,它会调用 C# 应用程序,并且文件名已正确存储。当 CSharpApp 关闭并且文件名被正确读取时,C++ 程序将恢复。
问题:
任何额外的 f10 按键都会导致 cout 语句显示 temp2 的值为零,我只在控制台中看到 endl 。File.txt 包含下一个文件的正确名称,但由于某种原因,C++ 程序仅在第一次按下 f10 时才正确获取文件名。
此功能的目的是按 f10 并在每次按 f10 时创建一个具有新名称的新文件。
我认为这两个程序不能同时访问该文件,因为 C# 应用程序的执行会暂停 C++ 程序。我还尝试更改 CSharp 应用程序中的编写器以附加文件名而不是覆盖文件。这导致 C++ 应用程序仅将 temp2 打印为第一个文件名,并且没有空行。不知道这意味着什么。
我目前正在努力解决这个问题,并将随着我的进步而更新。
更新:
我添加了以下内容来代替: reader >> temp;
代码:
if(reader >> temp)
cout << "Read in ok" << endl;
else
cout << "PROBLEM OCCURRED" << endl;
现在我的程序运行正常,但是我不清楚它为什么现在可以运行。对我来说,我假设添加这个 if test 和 cout 语句必须给程序更多时间。
谢谢您的帮助