c++文件操作

it2025-01-08  19

文件分为:文本文件、二进制文件

1.定义文件对象 fstream file //可读可写 ifstream file //可读不可写 ofstream file //可写不可读

2.打开文件 ifstream file; file.open("c:\\file.txt"); //与文件关联 ofstream file; file.open("d:\\file.txt");//与文件关联

3.读写文件 Std::string str; Infile>>str; //从文件流中输入Outfile<<str;

4.关闭文件 Infile.close(); Outfile.close(); 关闭后释放文件对象,取消与文件的关联。

 

/***************************************************/

定义fstream对象后,既可以对文件读又可以写。因此在 open时需要给定打开的方式: fstream file1,file2;file1.open("file1.txt",ios::in);//用于输入 file2.open("file2.txt",ios::out);//用于输出

在open是常常会因为文件不存在,或正在被占用而打开失败。可以通过对文件对象进行判断来得知是否打开成功。 file1.open("file.txt",ios::in); if(!file1) {   cout<<"file failed"endl; }

/************************************************/

有一个约定:

打开文件进行读时,若文件不存在则打开失败。

打开文件进行写时,若文件不存在则新建一个文件。若存在则删除原来的文件内容。 

/*****************************************************/

文本文件与二进制文件读取方法不同:

读写文本文件 从文件读取一个字符:file.getch(ch); 读取一行数据:File.getline(str); 从文件读取时,当读取到文件尾时,函数返回值为0,可以据此来判断循环结束。 向文件写入一个字符:file.put(ch);

拷贝一个txt文件内容到另一个新建txt#include<iostream>#include<fstream>using namespace std;

int main(void){ ifstream infile; ofstream outfile; infile.open("H:\\visual 2012\\test\\myfile.txt"); outfile.open("H:\\visual 2012\\test\ \file_copy.txt"); if(!infile || !outfile) { cout<<"未能打开文件"<<endl; return 0; } char ch; while(infile.get(ch)) { cout<<ch; outfile.put(ch); } infile.close(); outfile.close(); system("pause"); return 0;}

/********************************************************/

打开二进制文件 若在文件的open方法时没有特别说明,默认打开的文本文件,若要打开二进制文件,则要特别说明。  fstream infile,outfile; infile.open("inf1.dat",ios::in| ios::binary); outfile.open("outf1.dat",ios::out| ios::binary);

ios::out和ios::in  表示IO模式。

枚举类型,多个枚举值可以 使用运算符"|"组合使用。

二进制文件的关闭 关闭方法都一样,调用close方法。

二进制文件的读写 二进制文件的读写与文本文件不同,使用专门的方法。infile.read(char *buff,int nNum); buff存储数据的缓冲,nNum为要读取的长度 infile.read(&Stuinfo,sizeof(Stuinfo)); infile.read(pBuff,1024*sizeof(char));

向文件写入数据:outfile.write(pBuff,nLen);

二进制文件的结束infile.eof() 当文件结束位置时,该函数返回一个非零值;否则返回零。

文件指针 打开文件之后,读取或写入一段数据之后,文件指针都会移动 到读取或者写入的数据的末尾。 如file.read(pBuff,1024);读取成功之后,文件指针向后偏移1024字节。

file.write(pBuff,10); 写入成功之后,文件指针向后偏移10个字节。

读写方法可以自动的移动文件指针,除此之外还可以通过一个 专门的函数随机的移动文件指针。 infile.seekg(nNum,ios::cur); nNum为移动的字节数。 ios::cur表示从当前位置。还有另外两个相对位置: ios::begin,ios::end; infile.seekg(10,ios::begin);//相对文件开始将文件指针 移动10个字节。 infile.seekg(-2,ios::end);相对文件结束,向前移动20字 节实例,实现两个二进制文件的拷贝。#include<iostream>#include<fstream>using namespace std;

int main(void){ ifstream infile; ofstream outfile; infile.open("H:\\visual 2012\\test\ \testb.dat",ios::in|ios::binary); outfile.open("H:\\visual 2012\\test\ \testb_copy.dat",ios::out|ios::binary); if(!infile || !outfile) { cout<<"未能打开文件"<<endl; return 0; } char buff[1024]; while(!infile.eof()) { infile.read(buff,1024); int nLen=infile.gcount(); outfile.write(buff,nLen); } infile.close(); outfile.close(); cout<<"copy sucess!"<<endl; system("pause"); return 0;}

转载于:https://www.cnblogs.com/kingwenwu/p/4527061.html

最新回复(0)