【发布时间】:2018-12-25 12:04:35
【问题描述】:
您可以想象我正在向您提出我的问题,因为我无法解决我的研究问题。另外我比较缺乏经验,所以也许你可以帮忙。
在工作中,我有一个生成大量数据的模拟程序,所以我想使用二进制将每次增量写为 VTK 文件。出于获取数据的原因,我想自己实现这个 vtkWrite。 因此,您可能知道,我需要以 ASCII 格式编写一些行,其中包含我需要以二进制格式编写的数据部分的声明。 到目前为止,我的代码如下所示:
public void WriteVTKBin(int increment, string output_dir, bool format)
{
int data_structure = 12;
int[,] ElementTypes = new int[hex8Elements.numberOfElements, 1];
for (int ii = 0; ii < ElementTypes.Length; ii++) ElementTypes[ii, 0] = data_structure;
string File_name = "output_bin_" + increment + ".vtk";
var output = new FileStream(@output_dir + "/" + File_name, FileMode.Create);
var output_Stream = new StreamWriter(output);
using (output)
{
output_Stream.WriteLine("# vtk DataFile Version 3.0");
output_Stream.WriteLine("vtk-Output for increment");
if (format) output_Stream.WriteLine("BINARY");
else output_Stream.WriteLine("ASCII");
output_Stream.WriteLine("DATASET UNSTRUCTURED_GRID");
output_Stream.WriteLine("POINTS " + nodes.numberOfNodes + " double");
}
var output_rest = new FileStream(@output_dir + "/" + File_name, FileMode.Append);
var BinWriter = new BinaryWriter(output_rest);
using (output_rest)
{
BinWriter.Write(GetBytesDouble(GetPointsOutput()));
}
}
}
取自 BinaryWriter 的参数是我使用不同方法生成的 ByteArray。 我的想法是使用 FileMode.Create 初始化文件以覆盖可能存在的旧文件,然后写入标题部分。关闭文件后,使用 FileMode.Append 再次打开它并写入我的二进制数据。我想重复这一点,直到我想写出的所有字段都包含在 vtk 文件中。
问题是:BinaryWriter 会覆盖我的标题,即使它处于附加模式,当我想关闭它并编写另一个 ASCII 行时,它告诉我它无法访问已经关闭的文件。 那么我的方法是否有解决方案,或者是否有更复杂的方法来处理此类输出?
非常感谢您,
RR
【问题讨论】:
-
欢迎,您应该粘贴更好的代码示例:stackoverflow.com/help/mcve
-
为什么不把 ascii 字符串写成二进制 stackoverflow.com/questions/5664345/string-to-binary-in-c-sharp
标签: c# vtk streamwriter writetofile binarywriter