C语言文件操作
C语言库函数实现:
- 打开1.txt文件并写入"hello world"
- 从1.txt读出内容并打印;
int main(int argc, char* argv[])
{
char buff[1024] = {"hello world"}; //缓冲区
FILE* f = fopen("1.txt","w+");
fwrite(buff, 1, strlen(buff), f); //写入
rewind(f); //文件指针回到开头
int c = fread(buff,1,1024,f); //读出
buff[c] = 0; //添'\0'让其成为C语言中的字符串;
cout << buff << endl;
fclose(f);
return 0;
}
其中有两个注意的要点:
1)注意文件的打开方式(主要是w+和r+):
"w+"代表(r+和w+不一样的地方括号里标出,其余规则都一样):
打开文件进行“读写”操作,即既可读取,又可写入。
若欲操作的文件不存在,则新建文件(r+则直接报错)。
成功打开文件时,文件指针位于文件开头。
打开文件后,会清空文件内原有的内容(r+是不会清空)。
无论是读取内容还是写入内容,都可在文件中任意位置进行,且进行写入操作时,会覆盖原有位置的内容
2)注意文件指针的位置,代码第七行rewind(f); 将文件指针置头了,否则刚fwrite完,文件指针在尾,紧接着fread就读不出来内容了!;
C++文件操作
可以看到C语言的文件操作需要考虑的点很多,我们试试C++;
#include <fstream>
int main(int argc, char* argv[])
{
char buff[1024] = "hellow world";//缓冲区
//写入
ofstream o("1.txt");
if (!o.is_open()) cerr << "open error!" << endl;//打开
o.write(buff, strlen(buff));
o.close();
//读出
buff[0] = 0;//清空
ifstream f("1.txt");//实例对象 ifstream 流类型的f 与 1.txt绑定
if (!f.is_open()) cerr << "open error!" << endl;
// f.read(buff,1024); //.read读网页,要是想读的内容打印的话,最好用getline读入string,这样会自动追加'\0'变c字符串
string ret;
string line;
while (getline(f,line)) ret += line; //每次只能读一行
cout << ret<< endl;
f.close();
return 0;
}
C++典型的特征就是用了ofstream和ifstream这两个文件写入和文件读出流,先实例化对象,再一步步调用对象方法;
对比
C语言方法:代码量少,但是注意的细节比较多,比如文件打开的方式,文件指针的位置;
C++方法:代码量也不算多,实例化对象以后可以无脑调用.is_open()打开;
不过这两种方式都需要记得如果读取内容并打印,需要手动追加‘\0’,让文本内容变成C字符内容才能正常打印
;
实际上后期网络编程多数情况是需要读取前端人员制作的html内容或者客户端发来的各种报文,熟悉C++方法以后好用很多;