无法从文件写入/读取
unable to write to/read from file
我编写的代码在文件中写入数据时似乎有效,但是当我在写入其中时查看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
相关文章:
- 使用新行和不使用新行读取文件
- 读取文件并输入到矢量中
- 读取文件的最后一行并输入到链接列表时出错
- 为什么在读取文件大小时文件IO速度会发生变化
- 读取文件时运行时的未知行为
- 如何逐行读取文件,每行中的内容都用空格分隔并将其写入新文件中
- 读取文件中所有可能的十六进制 16 字节序列并打印每个序列
- C++ 读取文件读取文件不正确
- 读取文件并将其存储在unordered_map中时出现问题
- 读取文件时无法使用 OpenMP 获得加速
- 使用istringstearm和get行缓慢读取文件
- 如何继续读取不同功能中的文件,而不是从头开始再次读取文件?
- 读取文件时引发异常
- 从标准输入读取文件后读取用户输入
- 在读取文件后重置句柄
- 如何在C++编译时读取文件?
- std::ifstream 在读取文件中最后一项时设置 eofbit,但仅在读取数值类型时发生
- 读取文件在第二次调用时返回INVALID_HANDLE
- 通过指针读取文件
- 逐行读取文件,并将数据插入变量和数组中