【问题标题】:C/C++ and Fortran writing to same fileC/C++ 和 Fortran 写入同一个文件
【发布时间】:2013-08-30 06:46:45
【问题描述】:

我有一个 C/C++ 库,它的函数在 Fortran 程序中被调用。 我想将我的库中生成的一些输出写入 Fortran 程序输出到的同一个文件中。 我尝试传递文件名,用 C++ 打开它,写入它,最后用这个示例代码关闭它:

std::ofstream output;
output.open(name, ofstream::out | ofstream::app);

/*
   Some calculations...
 */    

output << "Result is " << result << std::endl;

output.close();

没有任何东西被写入文件,除非我删除 ofstream::app 但是大部分由 Fortran 代码写入的内容都被破坏了...... 我还尝试使用 fprintf 和类似的示例代码:

FILE * pFile = fopen(name, "a");

 /*
   Some calculations...
 */    

fprintf(pFile, "Result is = %.10E", result);

fclose(pFile);

结果相同。关于如何做到这一点的任何线索?

【问题讨论】:

  • 你检查文件是否正确打开了吗?
  • 正如弗拉基米尔所说,这很危险。但是,如果您在打开(附加)另一种“语言”之前以一种“语言”关闭,则可以(相对)安全地执行此操作。在 Fortran 90 中追加的标准方法是使用 position="append" 打开。在这里,在调用 C++ 函数之前关闭 Fortran 中的文件,返回后,如果需要再次写入,请重新打开以追加。

标签: c++ c fortran


【解决方案1】:

即使您找到了一种方法如何为一组运行时库执行此操作,但对于另一个(例如,不同的编译器集合)或另一个操作系统,它可能会失败......不要这样做,传递您想要的数据写入最初打开文件的系统部分。

【讨论】:

  • 我尝试了 arbautjc 的建议,它确实有效,但我同意你的观点,这样做绝对不安全。
  • 如果文件在由不同的运行时库打开之前实际上已关闭,我没有异议,那应该可以。一定要先关闭再用原代码再打开。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-27
相关资源
最近更新 更多