2016-08-21 3 views
-2

У меня возникла небольшая проблема с тем, как правильно записать это значение в файл. Я сделал небольшое исследование в Интернете и нашел эту статью.ifstream двоичное чтение/запись принимает только char *?

http://www.eecs.umich.edu/courses/eecs380/HANDOUTS/cppBinaryFileIO-2.html

#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(); 
} 

То, что я понял из статьи, что первый параметр является указателем недействительным? что означает, что он примет любой тип? Но когда я печатаю его, intelisense говорит, что нет перегрузки, а первый параметр принимает тип char *.

Я использую неправильный заголовок или что-то из более старой версии на C++?

Возможно, вам действительно поможет. Спасибо!

+0

Я понятия не имею, о чем вы действительно спрашиваете? –

+0

Это касается параметров outputFile.write() и того, что я взял из статьи. Я хочу написать целое число в файл с использованием двоичного вывода. –

+3

Вы можете увидеть документацию и пример на http://en.cppreference.com/w/cpp/io/basic_ostream/write – Loreto

ответ

0

Я не знаком с историей развития функций. Следовательно, я не могу прокомментировать, почему аргументы имеют тип char*, а не void*.

Чтобы решить вашу проблему ...

Вы можете использовать:

outputFile.write(reinterpret_cast<char*>(&testVar), sizeof(testVar)); 

reinterpret_cast Использование при использовании istream::read() также.

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(); 
} 
0

Первый параметр - char*. char, имеющий размер 1 байт, обозначает байтовые байтовые данные и char* обозначает блок данных.

Следовательно, при записи необработанных двоичных данных данные передаются как char* и размер блока.

Я использую неправильный заголовок или что-то из более старой версии на C++?

Нет, это не проблема, как указано это char* и не void*, что берется в качестве аргумента.

ПРИМЕЧАНИЕ Функция seekg() для входных потоков. Я думаю, что функциональность, в которой вы нуждались, была seekp()

Смежные вопросы