无法从文件写入/读取

unable to write to/read from file

本文关键字:读取 文件      更新时间:2023-10-16

我编写的代码在文件中写入数据时似乎有效,但是当我在写入其中时查看record.dat文件时,它没有显示。每次我尝试从文件中读取时,带有"主菜单"的细分都会从switch((重复。我必须在每种情况下分别编写带有访问模式的打开命令,否则它甚至不会打开文件。

#include <iostream>
#include <fstream>
#include <stdio.h>
#include <conio.h>
using namespace std;
class employee
{
private:
  int empcode;
  char empname[30];
  char empdesig[15];
  float empsalary;
public:
  void add_rec()
  {
    cout<<"nEmployee Code : ";
    cin>>empcode;
    cout<<"nEmployee Name : ";
    cin.ignore();
    cin.getline(empname,30);
    cout<<"nEmployee Designation : ";
    cin.getline(empdesig,15);
    cout<<"nEmployee Salary : ";
    cin>>empsalary;
  }
  void read_rec()
  {
    cout<<"nEmployee Code : "<<empcode;
    cout<<"nEmployee Name : "<<empname;
    cout<<"nEmployee Designation : "<<empdesig;
    cout<<"nEmployee Salary : "<<empsalary;
  }
};
int main()
{
  employee emp;
  fstream rfile;
  int ch,rec_no=0,pos=0;
  char ans='y',opt;
  do
  {
    cout<<"n";
    cout<<"ttt MAIN MENU ";
    cout<<"n1. Add Record ";
    cout<<"n2. Read Record ";
    cout<<"n3. Modify Record ";
    cout<<"n4. Exit "<<endl;
    cout<<"nSelect an option : ";
    cin>>ch;
    switch (ch)
    {
      case 1:
            {
              rfile.open("record.dat", ios::out);
              char opt='y';
              cout<<"tttEmployee Data Entry "<<endl;
              do
              {
                emp.add_rec();
                rfile.write((char*)&emp,sizeof(emp));
                cout<<"nEnter another record ? {Y/N} ";
                cin>>opt;
              } while(opt=='y'||opt=='Y');
            }
            break;
      case 2:
            {
              rfile.open("record.dat", ios::in);
              cout<<"tttEmployee Data Display "<<endl;
              rfile.read((char*)&emp,sizeof(emp));
              while(rfile)
              {
                emp.read_rec();
                rfile.read((char*)&emp,sizeof(emp));
              }
            }
            break;
      case 3:
            {
              rfile.open("record.dat", ios::out);
              cout<<"tttEmployee Data Modify "<<endl;
              cout<<"nEnter the record no. to modify : ";
              cin>>rec_no;
              pos=(rec_no-1)*sizeof(emp);
              rfile.seekg(pos,ios::beg);
              rfile.read((char*)&emp,sizeof(emp));
              cout<<"nModify this record ? {Y/N} "<<endl;
              cin>>opt;
              if(opt=='y'||opt=='Y')
              {
                cout<<"n";
                cout<<"tttEnter New Data "<<endl;
                emp.add_rec();
                rfile.write((char*)&emp,sizeof(emp));
                cout<<"nRecord Modified"<<endl;
                cout<<"nPress any key to continue...";
                getch();
              }
            }
            break;
      case 4:
            break;
      default:
            cout<<"nPlease select a valid option!";
            break;
    }
  } while(ch!=4);
  rfile.close();
  return(0);
}

每次在案例语句下打开文件以供书写时,您还需要关闭文件。关闭文件后,然后将双缓冲值写入物理文件。

案例1,在while语句之后关闭文件:} while(opt =='y'|| opt =='y'(;rfile.close((;

对案例2和3进行类似的更新,现在情况1和2都可以使用。案例3还有其他问题。例如,打开要修改的文件时,您将需要使用"应用"位掩码,以免删除现有内容。有关更多信息,请参见以下信息:https://en.cppreference.com/w/cpp/io/basic_fstream/open