2012-10-13 116 views
1

Possible Duplicate:
Efficient way of reading a file into an std::vector<char>?(C++)文件加載到一個載體

這可能是一個簡單的問題,但是我是新的C++,我可以不知道這一點。我正在嘗試加載一個二進制文件並將每個字節加載到一個向量中。這工作得很好用的一個小文件,但是當我嘗試讀取大於410個字節的程序崩潰並說:

This application has requested the Runtime to terminate it in an unusual way. Please contact the application's support team for more information.

我使用Windows代碼::塊。

這是代碼:

#include <iostream> 
#include <fstream> 
#include <vector> 

using namespace std; 

int main() 
{ 
    std::vector<char> vec; 
    std::ifstream file; 
    file.exceptions(
     std::ifstream::badbit 
     | std::ifstream::failbit 
     | std::ifstream::eofbit); 
    file.open("file.bin"); 
    file.seekg(0, std::ios::end); 
    std::streampos length(file.tellg()); 
    if (length) { 
     file.seekg(0, std::ios::beg); 
     vec.resize(static_cast<std::size_t>(length)); 
     file.read(&vec.front(), static_cast<std::size_t>(length)); 
    } 

    int firstChar = static_cast<unsigned char>(vec[0]); 
    cout << firstChar <<endl; 
    return 0; 
} 
+1

這已經問。 http://stackoverflow.com/questions/4761529/efficient-way-of-reading-a-file-into-an-stdvectorchar – andre

+0

完美的作品。感謝您的鏈接! – Alden

+0

順便說一句,如果文件爲空,並且因此您不調整矢量空間,則此'static_cast <無符號字符>(vec [0])'會使應用程序崩潰。 –

回答

2

我不知道什麼是你的代碼錯誤,但我剛纔已經回答了類似的問題與此代碼。

讀取字節unsigned char

ifstream infile; 

infile.open("filename", ios::binary); 

if (infile.fail()) 
{ 
    //error 
} 

vector<unsigned char> bytes; 

while (!infile.eof()) 
{ 
    unsigned char byte; 

    infile >> byte; 

    if (infile.fail()) 
    { 
     //error 
     break; 
    } 

    bytes.push_back(byte); 
} 

infile.close(); 
+0

錯誤:「if」是關鍵字 –

+0

LOL也很常見。非常明顯的錯誤。固定。 –