C/C++对文件的读写
来源:互联网 发布:c语言buffer 编辑:程序博客网 时间:2024/05/24 01:37
C/C++对文件的读写
学习在于总结
c/c++语言的相似度非常大。不管从事哪一个方向的开发,对c/c++都应该有了解,因为它们是操作系统的开发语言。了解它们对任何开发都是有好处的。
因为c++兼容c语言,所以c语言对文件的读取,c++都是可以运用的。当然c++也有专用于它的文件读写,更加的方便 和简单。
c语言对文件的读写
#include <iostream>#include <stdio.h>using namespace std;void readFile();void writeFile();int main(){ //读取文件内容 readFile(); //向文件写入内容 writeFile(); return 0;}void readFile(){ char fileName[256] = { 0 }; FILE* file; while(true) { cout << "please input fileName:"; cin >> fileName; cout <<fileName<<endl; if((file = fopen(fileName,"r")) == NULL)//“r”为读取文件内容,如果不存在文件则返回null,详细见下面的writeFile()方法 { cout <<"Error!!"<<endl; continue; } //导航到文件末尾 fseek(file,0,SEEK_END); //得到文件的字节数 int l = ftell(file); //回到文件开头 //fseek(file,0,SEEK_SET);//用fseek定位到文件开头 rewind(file);//回到文件起始位置 //输出文件的长度 cout<<l<<endl; //用fscanf循环输出文件中的内容 /*for(int i = 0; i < l; i++) { char ch; fscanf(file,"%c",&ch); cout << ch; } */ //用feof函数来判断文件是否指向末尾 //因为用feof进行判断文件是不是结束的时候,当指针指向最后一个字符的时候,依然存在字符,所以不会认为是文件最后,会继续向后面多读取一个字符。 //只有当指针指向的地方没有东西或者乱码时,才会认为是指向了最后。所以往往会多读取一个字符,最后多读取的字符往往为乱码,读取之后,才能知道是文件最后了,但是也要读,所以是乱码。这个乱码字符已经读取了。 //因为无法阻止它多读,所以只能不让最后一个乱码输出,来解决多输出一个字符的问题。所以用下面代码来表示: cout << "feof" <<endl; char ch; fscanf(file,"%c",&ch);//先读取一个字符,让文件指针指向第一个字符,即指针向后移动一位。因为刚开始指针不指向第一个字符,而是指向第一个字符前面,文件头 while(!feof(file))//首先判断读取的第一个字符的位置是不是文件结束,不是的话则进入循环,输出第一个字符(然后在向后读取一位,让指针向后移动,指向读取的这一位,然后判断这一位是不是空,是的话则结束,说明这一位读出来的内容是乱码)。 //是的话则结束,则说明读取的内容是乱码,文件是空文件,也不用输出了,因为会是乱码。 { cout <<ch; fscanf(file,"%c",&ch); } /* //用fread读取文件中的内容,块读取 //fileContent储存读出来的内容 char* fileContent = new char[l]; fread(fileContent,l,1,file);//fileContent为储存内容的数组;l为读取字节的长度;1表示只读取一边;file为文件的指针 //输出内容 cout << fileContent <<endl; */ /* //得到一个字节 //因为用feof进行判断文件是不是结束的时候,当指针指向最后一个字符的时候,依然存在字符,所以不会认为是文件最后,会继续向后面多读取一个字符。 //只有当指针指向的地方没有东西时,才会认为是指向了最后。所以往往会多读取一个字符,最后多读取的字符往往为乱码,读取之后,才判断出来是文件最后了,但是这个乱码字符已经读取了。 //因为无法阻止它多读,所以只能不让最后一个乱码输出,来解决多输出一个字符的问题。所以用下面代码来表示: char ch = fgetc(file); while(!feof(file)); { cout << ch; ch = fgetc(file); } */ /* //读取一个字符串 char* fileContent = new char[l]; fgets(fileContent,l,file);//fileContent为储存读取内容的数组,l为读取的最大长度,file为读取的文件的指针 cout << fileContent; */ cout <<endl; fclose(file); break; }}void writeFile(){ char fileName[256] = { 0 }; FILE* file; while(true) { cout << "please input fileName:"; cin >> fileName; file = fopen(fileName,"a");//"r"打开文本文件进行读写,不存在,则返回NULL //"a"如果存在文件,则在文件末尾加入内容,如果不存在则新建文件。 //“w”如果存在文件,则将文件删除,从新创建。如果不存在则新建文件。 //“r+”打开文本文件进行读/写,如果不存在则返回NULL //“w+”建立新文本文件进行读/写,如果存在文件,则将文件删除,从新创建。如果不存在则新建文件 //“a+”如果存在文件,则向文件末尾追加读/写,如果不存在则新建文件进行读/写(用a+最后可能多输入几个乱码字符,原因未知) //读取文件目前具有的字符个数 fseek(file,0,SEEK_END); int l = ftell(file); cout << "begin:" << l << endl; fseek(file,0,SEEK_SET);//还可以用rewind(file); /* //以fprintf的方式向文件写内容 char ch[10]={'b','b','b','b','b','b','b','b','b','b'}; fprintf(file,"%s",ch); printf("%s",ch); */ /* //以fputc的方式向文件写入一个字符 char ch = 'a'; fputc(ch,file);//ch为要写入的字符,file为文件指针 */ /* //以fputs的方式向文件写入一个字符串 char ch[10]={'b','b','b','b','b','b','b','b','b','b'}; fputs(ch,file);//ch为要写入的字符串,file为文件指针 */ //以fwrite的方式向文件写入内容块 char ch[10]={'b','b','b','b','b','b','b','b','b','b'}; long lenth = 10l; int count = 2; fwrite(ch,lenth,count,file);//ch为要写入的内容,lenth为写入内容的大小,count为写入次数,可以写入多次,file为写内容的文件指针 //读取文件最后的字符个数 fseek(file,0,SEEK_END); int l1 = ftell(file); cout << "end:" << l1 << endl; fseek(file,0,SEEK_SET); fclose(file);//关闭文件 }}
c++对文件的读写
#include <iostream>#include <fstream>#include <string>using namespace std;void readFile();void writeFile();int main(){ // readFile(); writeFile();}void readFile(){ char fileName[255] = {0}; while(true) { cout << "please input fileName:"; cin >> fileName; ifstream in; //输入流 in.open(fileName);//打开文件 if(in == NULL) { cout << "Error!!"<< endl; continue; } in.seekg(0,ios::end);//从结束位置开始计算偏移量,“ios::cur”从当前位置开始计算偏移量 int len = in.tellg (); cout << len << endl; in.seekg(0,ios::beg);//从文件开始位置开始计算偏移量 //read方式读取文件内容 /* //读取全部内容 char* fileContent = new char[len]; in.read (fileContent,len);//fileContent存储读取的内容,len为读取的长度 cout << fileContent << endl; */ /* //读取一个字符 char* ch = new char[1]; in.read(ch,1); cout <<ch <<endl; */ //getLine方式读取一行 /* //方法1: string str; getline(in,str); cout <<str<<endl; */ /* //方法2: char* fileContent = new char[len-5]; in.getline (fileContent,len-5); cout <<fileContent<<endl; */ /* //读取单个字符 char ch; for(int i = 0; i < len; i++) { in >> ch; cout << ch; } */ /* //读取字符串 string st ; in >> st; cout<<st; */ //读取一个字符数组 char ch[len] = {0}; for(int i = 0; i <len ;i++) { in >> ch[i]; cout << ch[i]; } cout << endl; in.close(); }}void writeFile(){ char fileName[255] = {0}; cout << "please input fileName:"; cin >> fileName; ofstream out; out.open(fileName); if(out == NULL) { cout << "Error!!"<<endl; return ; } while(true) { /* //向文件写入单个字符 char ch = 'c'; out << ch; */ /* //向文件写入数组 char ch[10] = {'a','b','c','d','e','f','j','f','g','h'}; out << ch; */ /* //向文输出字符串 string str = "123456"; out <<str; */ /* //以write方式向文件写内容 char ch[10] = {'1','2','3','4','5','6','7','8','9','0'}; out.seekp (0,ios::end);//定位到文件末尾写入 out.write (ch,10);//ch为要写入的内容,10为写入的长度 */ //向文件写入一个字符 char ch = 'b'; out.put(ch);//输入一个字符 break; } out.close();}
总结
以上内容就是我总结的 文件读取。如果不全,以后会补充完整。
0 0
- C对文件的读写
- C/C++对文件的读写
- C文件的读写
- C文件的读写
- C语言中对文件的读写函数
- C#:基于LINQ实现对ini文件的读写
- 关于c语言对文件的打开读写
- C\C++对大文件的快速读写
- C\C++对大文件的快速读写
- C语言对xml文件的读写操作
- C语言对文件的交替读写问题
- 【C/C++】文件读写
- 【C#】系统配置文件的读写
- C语言文件的读写
- C语言的文件读写
- C语言的文件读写
- C语言 文件的读写
- C语言文件的读写
- ConvertStore
- 国防科大校赛决赛-final(镜像赛) Problem B: XueXX and Binary
- ConvertAction
- spring配置
- ConvertFromAction
- C/C++对文件的读写
- 如何设置幻灯片自动播放
- ecshop邮件服务器设置注意事项
- ConvertToAction
- 有疑问
- ZOJ 2419-- Triangle-凸包+旋转卡壳求最大面积三角形(计算几何)
- Python实战_2_第一周_第三节课程:真实世界中的网页解析
- Android FlexboxLayout基本用法
- SampleAction