C++读写文件操作
程序员文章站
2022-08-14 11:40:52
文件操作:#include #include #include // 为了使用Sleep()函数 using namespace std;struct FishOil//1定义一个结构{std::string name;std::string uid;char sex;};bool InitFishC();//声明一个初始化的函数bool ReadFishC...
文件操作:
#include <iostream>
#include <fstream>
#include <windows.h> // 为了使用Sleep()函数
using namespace std;
struct FishOil//1定义一个结构
{
std::string name;
std::string uid;
char sex;
};
bool InitFishC();//声明一个初始化的函数
bool ReadFishC();//从文件读取数据
void RecordFishC();//记录数据
bool WriteFishC(FishOil *OilData);//将数据写入文件
int main()
{
int i;
InitFishC(); // 2初始化数据。
while (1)
{
std::cout << "请选择需要进行的操作: \n";
std::cout << "1. 打印数据到屏幕\n";
std::cout << "2. 录入数据\n";
std::cout << "3. 退出程序\n";
std::cin >> i;//输入你选择的序号123
switch (i)//根据i进行跳转
{
case 1://从文件中读取数据并打印到屏幕上
if (ReadFishC())//读取文件成功会有一个返回值,如果返回1表明读取成功
std::cout << "成功读取文件^_^\n\n";
else
std::cout << "读取文件失败T_T\n\n";
break;
case 2:
RecordFishC();//记录数据
break;
case 3://退出程序
return 0;
}
}
std::cout << "初始化失败T_T......\n\n";//没有进入执行上述while循环
return 0;
}
bool InitFishC()//初始化函数,使用bool类型是为了确定函数调用是否成功
{
FishOil OilInit = { "白天", "fc00001", 'M' };//初始化结构,就是赋值
if (WriteFishC(&OilInit) == false)//初始化之后写进文件,if判断一下写入函数是否调用成功,实参传进去的是WriteFishC(&OilInit)是一个地址,结构的首地址
std::cout << "初始化失败T_T\n";
}
bool ReadFishC()//从文件中读出来
{
std::string temp;//定义一个字符串
std::ifstream fileInput("FishC.txt");//使用文件流打开文件省略了.open()函数
if (fileInput.is_open())//打开成功
{
std::cout << "\n正在输出记录数据...... ";
for (int i = 0; i <= 100; i++) // 打印百分比
{
std::cout.width(3);//输出的字符串宽度
std::cout << i << "%";
Sleep(50);//在c++下以ms为单位,Sleep()里面的单位,是以毫秒为单位,所以如果想让函数滞留1秒的话,应该是Sleep(1000);
std::cout << "\b\b\b\b";
}
std::cout << "\n\n";
std::cout << " 姓名 " << " 身份证 " << " 性别 " << "\n\n";
while (std::getline(fileInput, temp))//传进去的参数第一个是输入流fileInput为什么不行????,读出来的一行数据存在temp中
{
std::cout << temp << " ";
std::cout << "\n";
}
std::cout << "\n\n";
return true;
}
else
return false;
}
void RecordFishC()
{
char goon, Save;
FishOil OilData;//给结构定义一个对象
FishOil *pOilData;//指向结构的指针
goon = 'Y';//字符
while ('Y' == goon)
{
std::cout << "请输入账号: ";
std::cin >> OilData.name;
std::cout << "请输入身份证:";
std::cin >> OilData.uid;
std::cout << "请输入性别:";
std::cin >> OilData.sex;
std::cout << "录入成功, 请问需要保存吗?(Y/N)";
std::cin >> Save;//字符
if ('Y' == Save)//是否保存
{
pOilData = &OilData;//指针指向OilData这个对象
if (WriteFishC(pOilData))//写入文件,需要传进去一个地址
std::cout << "成功写入文件^_^\n";
else
std::cout << "写入文件失败T_T\n";
}
else
{
return;
}
std::cout << "/n请问需要再次录入吗?(Y/N)";
std::cin >> goon;
}
}
bool WriteFishC(FishOil *pOilData)//写入函数参数是一个指向结构体的指针,因此实参应该传入一个地址
{
std::ofstream fileOutput("FishC.txt", std::ios::app);//使用文件流操作对象fileOutput,
//参数std::ios::app如果没有文件,生成空文件;如果有文件,在文件尾追加。
// std::ios::app用来说明在老数据追加新数据
if (fileOutput.is_open())//判断要写进的文件是否打开成功,打开成功进入if语句将其写入文件
{
fileOutput << pOilData->name << " ";
fileOutput << pOilData->uid << " ";
fileOutput << pOilData->sex << "\n";
fileOutput.close();//写入成功关闭文件
std::cout << "数据成功保存到FishC.txt\n\n";
}
else
std::cout << "保存失败T_T\n";
}
本文地址:https://blog.csdn.net/m0_37957160/article/details/108977267