2013-06-18 2 views
1

Я хочу прочитать двоичный файл, содержащий начальный символ sequenz [9] и char [5] для 5 идентификаторов. Поэтому я открыл свой файл, но я не уверен, как правильно сохранить мои данные.C++ read config двоичный файл

char[8] start_sq = "STARTSEQ\n" // start of the binary file 

после этого есть 5 идентификаторов.

Так как я могу установить мой начальный постион после start_sq

int current_pos = 0; 
std:ifstream readFile_; 
int *id; 
while((current_pos = (readFile_.tellg())) == eof) 
{ 
    //start after start_sq // not sure how to 
    int tmp_id = readFile_.read(reinterpret_cast<char*>(&id), sizeof(int)); // should be first ID (OR?) 
    ids.push_back(tmo_id); 
    // again for ID 2 

} 

я получить его, если мой вопрос немного неясно, в первую очередь. но я не уверен, как правильно это реализовать. но, как вы видите, у меня есть несколько идей/подходов.

ТНХ за любую помощь :)

+0

Предлагаю следующее: http://www.eecs.umich.edu/eecs/courses/eecs380/HANDOUTS/cppBinaryFileIO-2.html –

ответ

1

Да, вы могли бы сделать:

[ПРЕДУПРЕЖДЕНИЕ: следующее абсолютно не тестировался!]

//int current_pos = 0; 
std:ifstream readFile_; 

... // Open the file in binary mode, etc... 

//int *id; 
char id; 

// Read the 'STARTSEQ' string + 1 carriage return : 
char[9] startseq; 
readFile_.read(reinterpret_cast<char*>(&startseq[0]), 9); 
//             ^^^ 
// IMPORTANT : The above line shifts the current_pos of 9 bytes. 
// Short : readFile_.read(startseq, sizeof(startseq)); 

// Then read your IDs 
// You want your IDs as chars so let's read chars, not int. 
while(readFile_.good()) // or while(!readFile_.eof()) 
{ 
    readFile_.read(reinterpret_cast<char*>(&id), sizeof(char)); 
    // IMPORTANT : The above line shifts the current_pos of 1 byte. 
    // Short : readFile_.read(&id, 1); 
    ids.push_back(id); 
} 
// The above 'while' loops until EOF is reached (aka. 5 times). 
// See ifstream.good(), ifstream.eof(). 

Примечание: Строка для чтения ("StartSeq \ п") 9 символов, а не 8.

Другой подход для заполнения ids вектор может быть:

vector<char> ids; 
int size = 5; 
ids.resize(size); 
// Read 'size' bytes (= chars) and store it in the 'ids' vector : 
readFile_.read(reinterpret_cast<char*>(&ids[0]), size); 

Примечание: здесь нет while, но осторожно: не проверяется, достигнут ли EOF.

Я надеюсь, что это то, о чем вы спрашиваете.

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