【问题标题】:ofstream/fstream simply will not work, no matter what solution is triedofstream/fstream 根本不起作用,无论尝试什么解决方案
【发布时间】:2023-03-15 17:14:01
【问题描述】:

好的,伙计们,我已经尝试了我能想到的一切。我将一个文件名传递给这个函数。一点上下文:hash_table 是一个已经初始化并填充了键对的向量,该键对的“值”部分是一个具有字段“bucket_size”的链表。当我使用 cout 检查这些字段是否实际被访问时,它们是;甚至调试器也将它们列为已归档到输出流中。我有 flush() 和 close() 在那里,但它没有向文件写入任何内容。返回 true,表示流中没有错误。有人有什么想法吗?

 string line;
 std::ofstream ofs;
 if(ofs.is_open())
     ofs.close();
 ofs.open(filename);
 if (ofs.is_open())
 {
     cout << "File Opened" << endl;
     for (double i = 0; i < hash_table.capacity(); ++i)
     {
         ofs << "Bucket Number " << i;
         if (hash_table[i].value != NULL)
             ofs << " Bucket Size: " << hash_table[i].value->bucket_size << endl;
         else
             ofs << " Bucket Size: 0" << endl;
         ofs.flush();
     }
     cout << "closing file stream" << endl;
     ofs.flush();
 ofs.close();
 if (ofs.good())
         return true;
     else
         return false;
 }
 else
 {
 cout << "File not opened" << endl;
 return false;
 }

}

【问题讨论】:

  • 为什么在实例化ofs 之后检查ofs.is_open()
  • 如果有任何文件与流相关联,根据这篇文章:cplusplus.com/reference/fstream/ofstream/is_open
  • @caspase 的意思是当您执行第一个ofs.is_open() 时,没有文件可能与流相关联。第 3 行毫无意义,第 4 行永远不会执行。
  • 但是为什么要在实例化ofs 之后立即打开文件(我说的是第一个is_open(),而不是第二个);另外,你到底为什么要使用double 来代替i?另外,你检查hash_table.capacity()的返回值了吗??
  • 那么你是说如果你用cout 替换对ofs 的写入,你会得到正确的输出?但是如果ofs 指的是磁盘上的一个文件,它最终会是空的吗?

标签: c++ fstream flush fclose


【解决方案1】:

您几乎可以肯定检查了错误的文件。请记住,相对路径是相对于进程的工作目录的,它不一定与可执行文件在磁盘上的位置相同。

【讨论】:

    【解决方案2】:

    我通过控制台编译并运行它,现在它可以工作了,没有进行任何编辑。看来我的 IDE 不喜欢代码中的某些内容。无论如何,谢谢大家的回应。s

    【讨论】:

    • 那么你应该删除这个问题,因为它永远不会对其他人有用。
    猜你喜欢
    • 2022-07-14
    • 2018-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-04
    • 1970-01-01
    相关资源
    最近更新 更多