如何从随机访问文件中搜索和显示内容?

时间:2013-11-11 03:43:21

标签: c++ filestream random-access

此代码应该搜索文件中每个客户端的iterNo,然后显示该信息。我的问题是它始终显示文件中的第一项,无论我搜索的是什么号码。任何帮助将不胜感激。现在非常绝望...提前感谢您的回复。

void View()
{       
    char ans; //answer to store 'y' or 'n'
    Intervention inte;
    int interNo;

    ifstream InfoFile("info.dat", ios::in |ios::binary|ios::app);
    if (!InfoFile)
    {
        cout <<"Error - random files could not be opened.";
    }
    else
    {
        while (true)
        {
            cout << "\nEnter client's interNo number to display ";

            cin >> interNo;

            inte.getClient();
            inte.getAddress();
            inte.getTelNo();
            inte.getTime();
            inte.getDate();
            inte.getAnimal();

            //InfoFile.seekg(sizeof(Intervention)*(interNo - 1));
            InfoFile.read(reinterpret_cast<char *> (&inte), sizeof(Intervention));
            //if not eof show data
            if (!InfoFile.eof())
            {
                //Display the processed
                // info for the employee
                inte.display();
            }
            cout << "Enter another employee's information to display ? [y / n] ";
            fflush(stdin);
            ans = ' ';
            while (ans != 'y' && ans != 'Y' &&
                ans != 'n' && ans != 'N')
            {
                ans = _getch();
            } cout << endl;
            if (ans == 'n' || ans == 'N')
            {
                exit(1);
            }

        }//end while

    }//end else

}//end function view
//**********************************************

1 个答案:

答案 0 :(得分:0)

代码可以做它应该做的事情。如果找到的干预措施是您要查找的干预措施,则不会在任何地方进行检查,也不会移动文件读取指针。

如果您将ID存储在文件

你也只读过一次干预:

InfoFile.read(reinterpret_cast<char *> (&inte), sizeof(Intervention));

如果干预措施中包含您输入的ID,或许您打算检查

while(inte.getID()!=interNo && InfoFile)
  InfoFile.read(reinterpret_cast<char *> (&inte), sizeof(Intervention));

如果你没有

您需要取消注释您之前必须注释掉的代码行:

InfoFile.seekg(sizeof(Intervention)*(interNo - 1));

这一行实际上应该将read pointer定位到文件中的位置,其中写入了给定的Intervention。查看C++ reference页面,了解有关读指针的更多详细信息。