ofstream 创建文件但不在 C 中写入文件

新手上路,请多包涵

我正在编写一个 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 构造函数,包括文件名,继续执行打开文件会执行的操作

谢谢你的帮助!

原文由 Samuel Ohrenberg 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 766
2 个回答

注释掉多余的“开放”解决了它。

 #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;
    }
}

我强烈怀疑您通过打开和已经打开的流来调用未定义的行为。

原文由 Richard Hodges 发布,翻译遵循 CC BY-SA 3.0 许可协议

这是解释:

  1. myfile.open("TodayTime.txt"); 的调用将失败,因为流已经与文件关联,设置了失败位。
  2. is_open() 的调用将成功,因为文件已打开。
  3. 然后对流式运营商 << 的调用将失败(由于故障位)。

原文由 Vlad Feinstein 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题