Gra*_*Guy 3 c++ file-io vtk paraview
我为输出使用VTK数据类型.由于我的数据变得越来越大,用ASCII编写它需要相当长的时间,而这正是我迄今为止所做的.
我需要将其更改为二进制格式,但问题是该文件有一些标题(请参阅http://www.vtk.org/VTK/img/file-formats.pdf),即使对于二进制文件也需要用ASCII编写.
现在我没有足够的二进制格式经验,我的第一次尝试是通过打开两个流
ofstream asciiWriter(file_name.c_str());
ofstream binWriter(file_name.c_str(), ios::app | ios::binary);
Run Code Online (Sandbox Code Playgroud)
问题是输出似乎是无序的,asciiWriter并且binWriter没有以正确的顺序输出,所以我不能在ParaView中后处理我的文件.我试过的一件事是使用asciiWriter.flush()和binWriter.flush()每当我完成标题/数据写入,但这也没有帮助.
我该怎么办?
PS:我不想使用VTK包本身...它的巨大并增加了我的代码依赖!
在我所知道的所有现代系统中,二进制文件和文本文件之间的唯一区别是C运行时库处理换行符和文件结束字符.具体来说,在*nix系统上,文本和二进制文件的行为完全相同.在Windows上,写入'\n'文本文件会导致'\r'(CR)后跟'\n'(LF)写入实际文件; 阅读一"\r\n"对显示为单一'\n'.同样在Windows上,'\x1A'从文本文件中读取(Ctrl-Z,EOF)表示文件结束条件.二进制文件是逐字读取和写入的,没有转换.
阅读你的文件,我注意到它只在行的末尾指定'\n'(不"\r\n").这表明正确的方法是将标题读取和写入二进制文件,即使在Windows上也是如此.
作为一个无关紧要的问题,一些旧的系统(RSX-11和VMS浮现在脑海中)的二进制文件在磁盘上与文本文件截然不同.他们还直接在操作系统中支持基于记录和索引的文件.的.然而,他们已经修改过的版本open(),fopen()等功能(和其他语言中的等价物),以处理可能打开一个文件时指定的参数过多.在这样的系统上,每次都必须使用正确的文件模式.