gpt4 book ai didi

c# - 文件读取问题 C++/C#

转载 作者:行者123 更新时间:2023-11-28 07:59:09 25 4
gpt4 key购买 nike

我有两个程序协同工作以从文件中写入和读取数据。

第一个程序是 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 测试和 cout 语句一定会给程序更多时间。

感谢帮助

最佳答案

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

关于c# - 文件读取问题 C++/C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11957218/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com