我正在编写一个MFC程序,其中包含一个带有“导出”按钮的对话框,该按钮将获取已输入文件的所有数据并将其导出到.txt(在某些时候我想将此更改为一个.msg文件......但那是另一天的问题。)
但是,当我单击按钮时,它会创建文件,但不会在文件中写入任何内容。为了测试,除了一个简单的文字字符串,我删除了所有内容,甚至不打印。以下是该事件的当前代码:myfile.flush()语句是从我尝试打印到文件的循环时剩下的。
void CEHDAHTTimerDlg::OnBnClickedExport()
{
// in this function, we want to export the items to a text file
std::ofstream myfile("TodayTime.txt");
myfile.open("TodayTime.txt");
if (myfile.is_open())
{
myfile << "The average call time is ";
myfile.flush();
myfile.close();
}
else
{
SetDlgItemText(IDC_EXPORT, L"Export Unsuccessful! -- No File");
}
}
你能想到的有什么可能导致这种情况吗?我已经花了几个小时尝试不同的东西,比如使用myfile.write()函数。我在这里搜索了很多,reddit和谷歌一般试图找出为什么这不写。
感谢您的帮助。
编辑:
好的,按照我的方式调用myfile构造函数,通过包含文件名,继续执行打开文件会做什么
感谢您的帮助!
答案 0 :(得分:2)
以下是解释:
myfile.open("TodayTime.txt");
的调用将失败,因为该流已与文件关联,设置了failbit。 is_open()
的调用将成功。 <<
的调用将失败(因为失败位)。答案 1 :(得分:1)
评论多余的&#34; open&#34;解决了它。
#include <iostream>
#include <fstream>
int main()
{
// in this function, we want to export the items to a text file
std::ofstream myfile("TodayTime.txt");
// myfile.open("TodayTime.txt");
if (myfile.is_open())
{
myfile << "The average call time is ";
myfile.flush();
myfile.close();
}
else
{
std::cerr << "didn't write" << std::endl;
}
}
我强烈怀疑您通过打开和已打开的流来调用未定义的行为。
答案 2 :(得分:0)
这是因为myfile << "The average call time is ";
不起作用
修复
std::ofstream myfile;
myfile.open("TodayTime.txt",std::ios:app) //app for appending you can use trunc for
//truncating file
//for flushing content's of existing file use myfile.flush();
if (!data_pack.is_open())
{
std::cerr << "unable to open the file for writing";
}
myfile << "some stuff tho write you can replace the string with variable"
<<std::endl; //for next line
//at last close file
myfile.close();