2012-12-24 58 views
2

我一直在研究一個小程序,它將我需要的所有圖像放到一個單獨的文件中,但由於不知情的原因,當我嘗試使用fstream寫入文件時,它不會返回任何錯誤,但仍不會寫入任何內容。fstream不寫文件

爲爲例,我有一個簡單的函數初始化一個新的文件:

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(),但我也沒有工作。他認爲這個函數用來工作的最奇怪的東西,直到我相信我將fstream替換成fstream。 我在做什麼錯?

+1

有些東西在你的代碼中很棘手。 'initPAK'不會對'pakfile'做任何事情。 –

+0

你有兩個不同的文件'fileop'和'file'。你可能應該只使用其中之一。 –

+2

您打開同一個文件兩次,首先進行讀取和寫入,然後由於文件被鎖定,您的第二次打開可能會失敗。 –

回答

0

嗯,我有點愚蠢。這個功能確實有效,我的程序非常混亂,以至於功能從未被調用...... 非常感謝您的評論,他們幫助我清理了一下我的代碼。

獲得的經驗:永遠不要急於編碼,如果你應該睡覺,就更不用說了。

+1

你可能想標記它「回答」,然後... –

+0

我是相當新的stackoverflow,所以我該怎麼做?我不能用我的答案,它說thjat我不能接受它,直到2天。 – Maeln

+1

啊,好的,所以你必須在幾天後回來......對不起...... –