2012-12-24 3 views
2

Я работал над небольшой программой, которая помещала все изображения, которые мне нужны для моего 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(), но я тоже не работал. Самое странное, что эта функция используется для работы, пока я не вернусь к потоку. Что я делаю неправильно?

+1

Что-то в вашем коде. 'initPAK' ничего не делает с' pakfile'. –

+0

У вас есть два разных файла 'fileop' и' file'. Возможно, вы должны использовать только один из них. –

+2

Вы открываете тот же файл дважды, сначала для чтения и записи, а затем ваш второй открытый, вероятно, сбой из-за блокировки файла. –

ответ

0

Ну, я немного глуп. Эта функция действительно работает, моя программа была настолько грязной, что функция никогда не вызывалась ... В любом случае, спасибо за ваши замечания, которые помогают мне немного очистить мой код.

Извлеченный урок: никогда не спешите вводить код, даже если вы должны спать.

+1

Возможно, вы захотите отметить его «ответили», затем ... –

+0

Я довольно новичок в stackoverflow, так как я могу это сделать? Я не могу использовать свой ответ, он говорит, что я не могу принять его до 2 дней. – Maeln

+1

А, ладно, вам придется вернуться через пару дней ... Извините ... –