如何从文件的末尾移动到c ++的开头

时间:2012-03-27 15:48:00

标签: 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);
}

2 个答案:

答案 0 :(得分:3)

要转到文件末尾:

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

要获取文件的长度(在结尾时),请使用tellg返回get指针的绝对位置。

length = is.tellg();

要回到开头再次使用seekg,这会设置put指针的位置。

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

如果你已经尝试过,那么你可以更具体地说明什么是无效的吗?

答案 1 :(得分:0)

你可能想要“seekg(ios_base :: beg)”:

http://bytes.com/topic/c/answers/602553-ifstream-seeking

http://www.cplusplus.com/reference/iostream/istream/seekg/

如果它“不起作用”,请尝试两件事:

1)检查位置“tellg()”

2)检查错误状态(eofbit,failbit,badbit)