首先来看一下c语言的操作
//c语言的写入 void main() { int ar[] = { 10, 11, 22, 33, 44, 55, 66, 77, 88, 99 }; int size = sizeof(ar) / sizeof(ar[0]); FILE* fp = fopen("Test1.txt", "w"); assert(fp!=NULL); // "w" 是写入,创建一个fp的txt 功能是写入 for (int i = 0; i < size; ++i) { fprintf(fp, "%d ", ar[i]); //fprintf 在fp中以整形输入ar[i] } fclose(fp); } void main() { string str; while (getline(cin, str)) { cout << str<< endl; } }
//c语言的读 void main() { int ar[10]; FILE *fp = fopen("Test1.txt", "r"); assert(fp != NULL); for (int i = 0; i<10; ++i) fscanf(fp, "%d", &ar[i]); fclose(fp); }
c++中与c不同的是基于对象,用函数操作。下面是c++版本
通过文本文件读写 都是字符
cpp的输入流写法
void main() { int ar[] = { 11, 22, 33, 44, 55, 66, 77, 88, 99 }; int n = sizeof(ar) / sizeof(ar[0]); ofstream ofile; ofile.open("Test2.txt", ios::out); assert(ofile); for (int i = 0; i < n; ++i) ofile << ar[i] << " "; ofile << endl; ofile << "end"; ofile.close(); }
void main() { int ar[10]; ifstream ifile; ifile.open("Test2.txt", ios::in); assert(ifile); for (int i = 0; i < 10; ++i) ifile >> ar[i]; ifile.close(); }
接下来看看c语言和c++的二进制读写的操作
因为代码段太多了 我就全部写一个编码段了,没有分开
每部是怎样操作干什么已经在代码段里写清楚啦!
//c++的读写 void main() { int ar[10]; int size = sizeof(ar) / sizeof(ar[0]); ifstream ifile; ifile.open("Test22.txt", ios::in | ios::binary); //二进制写入 因为二进制没有转化 所以是乱码 assert(ifile); ifile.read((char*)ar, sizeof(int)*size); ifile.close(); } //c++的写文件 void main() { int ar[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 }; int size = sizeof(ar) / sizeof(ar[0]); ofstream ofile; ofile.open("Test22.txt", ios::out | ios::binary); //二进制写入 因为二进制没有转化 所以是乱码 assert(ofile); ofile.write((const char*)ar, sizeof(int)*size); ofile.close(); } //c语言的二进制读取 void main() { int ar[10]; int size = sizeof(ar) / sizeof(ar[0]); FILE* fp = fopen("Test11.txt", "rb"); //二进制读出 assert(fp != NULL); fread(ar,sizeof(int),10,fp); fclose(fp); } void main() { int ar[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 }; int size = sizeof(ar) / sizeof(ar[0]); FILE* fp = fopen("Test11.txt", "wb"); //二进制写入 因为二进制没有转化 所以是乱码 assert(fp != NULL); fwrite(ar, size, sizeof(int), fp); fclose(fp); }
配置管理器 就是写一个文本 然后通过类来才做读写,代码如下,用ip和端口做例子。
//配置管理类的作用是将ip和端口的内容,从电脑中读取出来放在一个结构体里面 struct ServerInfo { char _ip[32]; int _port; }; class ConfigManager { public: ConfigManager(string cfg = "ghcserver.txt") :_configfile(cfg) {} public: void ReadInfo(ServerInfo &info)//把结构体放进去用来存数据 { ifstream ifile(_configfile.c_str(), ios::in);//.c_str() string对象转化为指针类型 assert(ifile); ifile >> info._ip >> info._port; ifile.close(); } void WriteInfo(ServerInfo &info) { ofstream ofile(_configfile.c_str(), ios::out); assert(ofile); ofile << info._ip << " " << info._port; ofile.close(); } private: string _configfile; };
将整型数字改成字符串有两种做法,一种是利用函数,一种是以流作为中间商,转化。代码如下:
//做法2 void main() { int a = 783952; string str; stringstream ss; //好处是 不用考虑空间 //先将a输出给字符串流ss ss << a; //再将处理好的ss 输入给str; ss >> str; cout << str << endl; //ss底层就有一个str对象 cout << ss.str() << endl; //ss使用后 必须清除一下 否则原来的数据依旧存在 //因为以 0/ 结尾的 所以下一个进来 也看不到 ss.clear(); int b = 8384; ss << b; ss >> str; cout << str << endl; } //做法1 //整形转化字符串的情况 void main() { int a = 986725; char str[30] = { 0 }; //将a中的每一个末尾 处理成一个字符存入str中 //参数是 数字 存入的位置 以几进制处理 //itoa(a, str, 10); sprintf(str, "%d", a); //给str中以%d的形式放a cout << str << endl; }
结束啦,谢谢