文件阅读问题C ++ / C#

时间:2012-08-14 16:58:02

标签: c# c++ io fstream

我有两个程序一起编写和读取文件中的数据。

第一个程序是C#表单。它从用户接收文件名并将其写入C驱动器上的文件并退出/关闭C#应用程序。

Revelvant代码:

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#app并正确存储文件名。当CSharpApp关闭并正确读取文件名时,C ++程序将恢复。

问题:

任何额外的f10键按下都会导致cout语句显示temp2的值为nothing,我只是在控制台中看到endl。 File.txt包含下一个文件的正确名称,但由于某种原因,C ++程序仅在第一次按下f10时才正确获取文件名。

此功能的目的是按下f10并在每按一次f10时使用新名称创建一个新文件。

我认为两个程序不能同时访问该文件,因为C#app的执行会暂停C ++程序。此外,我尝试更改CSharp应用程序内的编写器以附加文件名,而不是覆盖该文件。这导致C ++应用程序将temp2打印为仅作为第一个文件名,并且没有空行。不确定这意味着什么。

我目前正在努力解决这个问题,并会在我取得进展时进行更新。

更新:

我添加了以下代码:reader&gt;&gt;温度;

代码:

if(reader >> temp)
    cout << "Read in ok" << endl;
else
    cout << "PROBLEM OCCURRED" << endl;

现在我的程序运行正常,但我不清楚为什么它现在正在运行。对我来说,我假设添加这个,如果test和cout语句必须给程序更多的时间。

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

我怀疑在C ++应用程序尝试读取之前,C#应用程序中的文件写入未完成提交到磁盘。您可以尝试在调用writer.Close()之前添加writer.Flush(),看看它是否有任何区别。