Я работал над небольшой программой, которая помещала все изображения, которые мне нужны для моего 3D-движка, в один файл, но по неизвестным причинам, когда я пытаюсь использовать fstream для записи в файл, он не возвращает никакой ошибки, но все равно ничего не пишет.fstream не пишет файл
для Exemple, у меня есть простая функция, которая инициализирует новый файл:
void initPAK(fstream& pakfile, image firstImg)
{
PAKheader head;
head.sign[0] = 'P';
head.sign[1] = 'A';
head.sign[2] = 'K';
head.nbdata = 1;
head.index.push_back(sizeof(head.sign)+sizeof(head.nbdata)+sizeof(uint32_t));
if(pakfile.is_open())
{
pakfile.write(head.sign, sizeof(head.sign));
pakfile.write((char*)&head.nbdata, sizeof(head.nbdata));
for(uint32_t n=0; n<head.index.size(); n++)
{
pakfile.write((char*)&head.index[n], sizeof(head.index[n]));
}
pakfile.write((char*)&firstImg.width, sizeof(firstImg.width));
pakfile.write((char*)&firstImg.height, sizeof(firstImg.height));
pakfile.write((char*)&firstImg.channels, sizeof(firstImg.channels));
for(uint32_t n=0; n<firstImg.data.size(); n++)
{
pakfile.write((char*)&firstImg.data[n], sizeof(firstImg.data[n]));
}
}
else
{
cerr << "unable to open" << endl;
}
}
И я использую его так:
fstream fileop;
fileop.open("bin_file", fstream::in | fstream::out | fstream::trunc | fstream::binary);
unsigned char zdata[] = {
255, 0, 0,
0, 255, 0,
0, 0, 255,
};
image zimg;
zimg.width = 3;
zimg.height = 1;
zimg.channels = 3;
for(int i=0; i < 9; i++)
{
zimg.data.push_back(zdata[i]);
}
initPAK(fileop, zimg);
fileop.close();
Но файл «bin_file» никогда его не записываю и не создано , Я видел в другом вопросе stackoverflow, что я должен использовать flush(), но я тоже не работал. Самое странное, что эта функция используется для работы, пока я не вернусь к потоку. Что я делаю неправильно?
Что-то в вашем коде. 'initPAK' ничего не делает с' pakfile'. –
У вас есть два разных файла 'fileop' и' file'. Возможно, вы должны использовать только один из них. –
Вы открываете тот же файл дважды, сначала для чтения и записи, а затем ваш второй открытый, вероятно, сбой из-за блокировки файла. –