在C#中读取C ++ ofstream写入文件

时间:2019-02-19 15:10:38

标签: c# c++

我正在用C ++编写文件,如下所示:

void TestExportWriteOut()
{
    const auto filePath = R"(C:\TestOut.bin)";
    ofstream outFile(filePath, ios::out | ios::binary);
    outFile<< 1;
    outFile.flush();
    outFile.close();
}

并尝试以C#读取它:

[TestMethod]
public void LoadTestOut()
{
    const string filePath = "C:\\TestOut.bin";
    using (var fileStream = File.OpenRead(filePath))
    using (var reader = new BinaryReader(fileStream))
    {
        var intOne = reader.ReadInt32(); //!!Throws Exception
        Assert.AreEqual(intOne, 1);
    }
}

但是,就在我尝试读取整数值1的那一行,我得到一个异常提示:

  

System.IO.EndOfStreamException:“无法读取超出流末尾的位置。”


读取C#中使用ofstream在C ++中创建的文件的正确方法是什么?

我可以在文件系统上看到C ++创建的文件,尽管我写的只是一个int,但其大小为1KB。

1 个答案:

答案 0 :(得分:1)

ios::binary标志不会执行您认为的(*)。它不会影响operator<<(int)的行为,而该行为仍将其参数置于文本表示中。在C ++方面,使用outFile.write()输出二进制表示形式(与ios::binary标志一起使用)。


(*)确实以OS的二进制文件形式打开文件,该OS的二进制文件概念与文本文件不同(Windows和Unix都不在该类中),并且它阻止了\n在表示操作系统行尾的常规方法(Windows为此使用一对字符,这就是为什么需要ios::binary标志的原因)