2012-03-27 3 views
1

У меня небольшая проблема с моим кодом. Я пытаюсь прочитать некоторую информацию с конца файла произвольного доступа, а затем переместить курсор в начале файла. Пока seekg не работает. Вот мой код:Как перейти от конца файла к началу в C++

void main() 
{ 
    AssignData FileOut; 
    AssignData FileIn; 

    ofstream OutData("Data.dat", ios::out | ios::app | ios::binary); 
    ifstream InData("Data.dat", ios::in); 

    cout <<"Writing to file" << endl; 

    if (!OutData) 
    { 
     cout<<"File does not exist"<<endl; 
    exit(1); 
    } 

    //read through file 

    while (InData.read(reinterpret_cast< char * >(&FileIn),sizeof(AssignData))) 
    {       
    } 

    FileIn.DisplayFileContent();//displays the last line in the file 

    FileOut.setInfo();//allows user to add another record 

    //Writes record to file 
    OutData.write(reinterpret_cast< const char * >(&FileOut), sizeof(AssignData));           

    OutData.close(); 
    cout << endl<<endl; 
    //Reads the first record from the file 

    InData.seekg(0); 

    while (InData.read(reinterpret_cast< char * >(&FileIn), sizeof(AssignData))) 
    { 
    // display record 
     if ((FileIn.getID() != 0) || (FileIn.getID()!=NULL)) 
    { 
     FileIn.DisplayFileContent(); 
    }       
    } 

    InData.close(); 

    _getch(); 
    exit(0); 
} 

ответ

3

Для перехода к концу файла:

ifstream is; 
is.open("file.txt", ios::binary); 
is.seekg (0, ios::end); 

Чтобы получить длину файла (когда в конце), используйте tellg, которые возвращает абсолютную позицию указателя get.

length = is.tellg(); 

Чтобы вернуться к началу использования seekg снова, это устанавливает положение указателя пут.

is.seekg (0, ios::beg); 

Если вы пробовали, вы могли бы уточнить, что не работает?

+0

Можно ли получить длину файла (и для какого определения длины) с помощью 'tellg' очень зависит от системы, и я не буду рассчитывать на него. –

+0

Я попробовал то, что вы сказали, и заменил первое заявление. Всякий раз, когда я пытаюсь прочитать из файла, я использую код «InData.read (reinterpret_cast < char * > (& FileIn), sizeof (AssignData))». Однако информация из файла не передается в «FileIn.DisplayFileContent()», который отображает содержимое последней строки – OpalG

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