ofstream 创建文件但不在 C++ 中写入
ofstream creating file but not writing to it in C++
我正在编写一个 MFC 程序,该程序有一个带有 "Export" 按钮的对话框,该按钮将获取已输入到文件中的所有数据并将其导出到 .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 和 google 搜索了很多,试图找出为什么这不是写的。
感谢您的帮助。
编辑:
好的,按照我所做的方式调用 myfile 构造函数,包括文件名,继续执行打开文件会执行的操作
感谢您的帮助!
注释掉多余的 "open" 即可解决。
#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;
}
}
我强烈怀疑您正在通过打开和已经打开的流调用未定义的行为。
解释如下:
- 对
myfile.open("TodayTime.txt");
的调用将失败,因为流已经与文件关联,设置了失败位。
- 对
is_open()
的调用将会成功,因为文件已打开。
- 然后对流式运算符
<<
的调用将失败(因为 failbit)。
这是因为 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();
我正在编写一个 MFC 程序,该程序有一个带有 "Export" 按钮的对话框,该按钮将获取已输入到文件中的所有数据并将其导出到 .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 和 google 搜索了很多,试图找出为什么这不是写的。
感谢您的帮助。
编辑:
好的,按照我所做的方式调用 myfile 构造函数,包括文件名,继续执行打开文件会执行的操作
感谢您的帮助!
注释掉多余的 "open" 即可解决。
#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;
}
}
我强烈怀疑您正在通过打开和已经打开的流调用未定义的行为。
解释如下:
- 对
myfile.open("TodayTime.txt");
的调用将失败,因为流已经与文件关联,设置了失败位。 - 对
is_open()
的调用将会成功,因为文件已打开。 - 然后对流式运算符
<<
的调用将失败(因为 failbit)。
这是因为 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();