ifstream二进制读/写只需要char *?

时间:2016-08-21 04:36:22

标签: c++ fstream

我在弄清楚如何正确地将此值写入文件时遇到了一些麻烦。我在互联网上做了一些研究,发现了这篇文章。

javadocs

#include <fstream>
#include <iostream>

int main()
{
    int testVar = 71;
    std::ofstream outputFile;
    outputFile.open("C:/binary.dat", std::ios::out | std::ios::binary);
    outputFile.seekg(0);
    outputFile.write(&testVar, sizeof(testVar));
    outputFile.close();
}

我从文章中了解到,第一个参数是一个void指针?这意味着它会接受任何类型?但是当我输入它时,intelisense表示没有重载,第一个参数采用char *类型。

我使用了错误的标题或旧版C ++版本的内容吗?

真的可以在这里使用一些帮助。 谢谢!

3 个答案:

答案 0 :(得分:0)

我不熟悉功能开发的历史。因此,我无法评论为什么参数类型为Category 1 Product 1 Amount Product 2 Amount .... Total Amount of Category 1 : xxxxx Category 2 Product 3 Amount .... Total Amount of Category 2 : xxxxx 而不是char*

解决问题...

您可以使用:

void*

同时使用outputFile.write(reinterpret_cast<char*>(&testVar), sizeof(testVar)); 时使用reinterpret_cast

答案 1 :(得分:0)

你真的只需要像之前所说的那样将它转换为char *,但代码还有其他问题。 seekg()用于输入流,您正在编写输出文件。如果您打算清除该行,只需使用trunc。

打开该文件
#include <fstream>
#include <iostream>

int main()
{
    int testVar = 71;
    std::ofstream outputFile("C:/binary.dat", std::ios::out | std::ios::binary | std::ios::trunc);
    outputFile.write((char*)&testVar, sizeof(testVar));
    outputFile.close();
}

答案 2 :(得分:0)

第一个参数是if。 大小为1字节的if (Get-Printer -ComputerName $nombre) { get-printjob | where {$_.timesubmitted -lt $old -and $_.JobStatus -match "Complete" -and $_.JobStatus -notmatch "Spooling"} | Remove-PrintJob Write-Host "Eliminados los trabajos completados mas antiguos de una hora" } else Write-Host "No se han encontrado trabajos que coincidan con los parametros" } 表示逐字节数据,char*表示数据块。

因此,在编写原始二进制数据时,数据将作为块的char和大小传递。

  

我使用了错误的标题或旧版C ++版本的内容吗?

不,这不是问题,因为它是char*而不是char*被视为参数。

注意 seekg()成员函数用于输入流。我认为你需要的功能是seekp()