C++数据传输
从数据流中保存数据到本地:
头文件 #include <fstream>
char * data;
std::ofstream("filename",std::ios::binary).write(data,size);
或者
std::ofstream out("somefile.bin", std::ios::binary);
out.write(array, sizeof(array));
FILE* file = fopen( "myfile.bin", "wb" );
fwrite( array, 1, 100, file );
fclose(file);
/*
字符输入函数 fgetc 适用于所有输入流
字符输出函数 fputc 适用于所有输出流
文本行输入函数 fgets 适用于所有输入流
文本行输出函数 fputs 适用于所有输出流
格式化输入函数 fscanf 适用于所有输入流
格式化输出函数 fprintf 适用于所有输出流
二进制输入 fread 适用于文件
二进制输出 fwrite 适用于文件
*/
文本文件
读文件
文件读取方式:
char buf[1024] = {0};
while( ifs >> buf ){
cout << buf << endl;
}
char buf[1024] = {0};
while( ifs.getline(buf, sizeof(buf)) ){
cout << buf << endl;
}
string buf;
while(getline(ifs,buf)){
cout << buf << endl;
}
char c;
while( (c = ifs.get()) != EOF ){
cout << buf << endl;
}
写文件
文件打开方式:
ios::in | 为读文件而打开文件 |
---|---|
ios::out | 为写文件而打开文件 |
ios::ate | 初始位置:文件尾 |
ios:app | 追加方式写文件 |
ios::trunc | 如果文件存在,先删除,后创建 |
ios::binary | 二进制方式 |
二进制文件:
打开方式要指定为 ios::binary
写文件步骤如下:
1、包含头文件
#include < fstream >
2、创建流对象
ofstream ofs;
3、打开文件
ofs.open(“文件路径” , ios::out | ios::binary );
4、写数据
Person p = new Person(“张三”,17);
ofs.write((const char*)&p , sizeof(Person) );
5、关闭文件
ofs.close();
读文件步骤如下:
1、包含头文件
#include < fstream >
2、创建流对象
ifstream ifs;
3、打开文件并判断文件是否打开成功
ifs.open(“文件路径” , ios::in | ios::binary );
4、读数据
Person p;
ifs.read((const *)&p, sizeof(Person))
5、关闭文件
ifs.close();
C++定义变长数组
在使用char[]保存数据时,如果先知道了数据的大小,需要动态开辟一个对应大小的字符数组,可以这样设计
char *p =new char[len];
常见的错误:
char p[len];
C++编译器会报错说len的大小不能确定,因为用这种形式声明数组,数组的大小需要在编译时确定。而且这样也不行:
char p[]=new char[len];
编译器会说不能把int*型转化为int[]型,因为用new开辟了一段内存空间后会返回这段内存的首地址。
所以要把这个地址赋给一个指针,所以要用char *p=new char[len];