C++ 文件操作
2016-04-04 22:47
197 查看
(1)文本方式-逐个字符拷贝
/*将一个文件的内容逐个字符拷贝进第二个文件*/
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream inFile; //输入流对象
ofstream outFile; //输出流对象
char ch; //字符变量定义
inFile.open("in.txt",ios::in); //将输入流对象和读入文件建立关联,以文本方式打开
outFile.open("out.txt",ios::out); //将输出流对象和输出文件建立关联
//循环对读入文件逐个字符进行读入,然后写入到输出文件中
while(inFile.get(ch)) //循环到读入EOF--文件结束标记
outFile.put(ch); //逐个字符输出到输出文件
inFile.close(); //关闭文件
outFile.close(); //关闭文件
cout<<"Copy from in.txt fo out.txt Finish!"<<endl;
system("pause"); //暂停
return 0;
}
(2)文本方式--逐行拷贝
/*将一个文件的内容逐行字符串拷贝进第二个文件*/
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
int main()
{
ifstream inFile; //输入流对象
ofstream outFile; //输出流对象
char ch[200]; //字符数组
inFile.open("in.txt",ios::in); //将输入流对象和读入文件建立关联,以文本方式打开
outFile.open("out.txt",ios::out); //将输出流对象和输出文件建立关联
//循环对读入文件逐行字符串进行读入,然后写入到输出文件中
while(!inFile.eof()) //循环读入每行直到遇到文件结束
{ inFile.getline(ch,sizeof(ch),'\n');
outFile.write(ch,strlen(ch));
outFile.write("\n",1); //因为getline设置的是遇到回车结束,因此'\n'读不进来,因此需要在输出ch后,再输出一个'\n'来表示行结束
//outFile<<ch<<'\n';可替代上两句
}
inFile.close(); //关闭文件
outFile.close(); //关闭文件
cout<<"Copy from in.txt fo out.txt Finish!"<<endl;
system("pause"); //暂停
return 0;
}
(3)二进制方式--逐块拷贝
/*将一个文件的内容以二进制方式逐块拷贝到第二个文件
注意:要考虑最后一次读取块的情况,因为最后一次块读取时,真实读取的大小可能会小于希望读取的大小。
read( )函数
从流中读取字符串的成员函数read
该成员函数一般形式是: read(char* pch, int nCount)
从输入流中读取nCount个字符。
当输入流中的字符数小于nCount时,结束读取。经常使用read函数读取二进制数据。
write( )函数
成员函数write()输出一串字符。
该成员函数一般形式是:write(char* pch, int nCount)
其中,pch是指向字符数组的指针;nCount指明从第一个参数中复制输出字符的个数。
gcount( )函数
输入流对象的成员函数,获取确定提取的字符数
当程序从文件流中提取字符时,可能需要确切知道提取的字符数,可以使用gcount( )函数
使用方式:输入流对象.gcount()
*/
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
int main()
{
ifstream inFile; //输入流对象
ofstream outFile; //输出流对象
char ch[200]; //字符数组
long int size;
inFile.open("in.txt",ios::in|ios::binary); //将输入流对象和读入文件建立关联,以二进制方式打开
outFile.open("out.txt",ios::out|ios::binary); //将输出流对象和输出文件建立关联,以二进制方式打开
//循环对读入文件逐块进行读入,然后写入到输出文件中
while(!inFile.eof()) //循环读入直到遇到文件结束
{ inFile.read(ch,sizeof(ch)); //读取大小为 sizeof(ch)字节的数据存放到数组ch中
size=inFile.gcount(); //获取真实提取的字符数,最最后一次提取时,可能会出现size和sizeof(ch)的值不一致的情况
outFile.write(ch,size<sizeof(ch)?size:sizeof(ch));
}
inFile.close(); //关闭文件
outFile.close(); //关闭文件
cout<<"Copy from in.txt fo out.txt Finish!"<<endl;
system("pause"); //暂停
return 0;
}
(4)二进制方式-一次性拷贝
/*将一个文件的内容以二进制方式一次性拷贝到第二个文件
注意:先获取文件大小,然后再动态创建内存空间来存放文件内容
read( )函数
从流中读取字符串的成员函数read
该成员函数一般形式是: read(char* pch, int nCount)
从输入流中读取nCount个字符。
当输入流中的字符数小于nCount时,结束读取。经常使用read函数读取二进制数据。
write( )函数
成员函数write()输出一串字符。
该成员函数一般形式是:write(char* pch, int nCount)
其中,pch是指向字符数组的指针;nCount指明从第一个参数中复制输出字符的个数。
*/
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
int main()
{
ifstream inFile; //输入流对象
ofstream outFile; //输出流对象
char *buffer; //字符指针
long int size;
inFile.open("in.txt",ios::in|ios::binary|ios::ate); //将输入流对象和读入文件建立关联,以二进制方式打开,并定位读指针为文件尾
outFile.open("out.txt",ios::out|ios::binary); //将输出流对象和输出文件建立关联,以二进制方式打开
//循环对读入文件逐块进行读入,然后写入到输出文件中
size=inFile.tellg();
cout<<size<<endl;
buffer=new char[size]; //动态开辟空间,以便存放要读取的文件内容
inFile.seekg(0,ios::beg); //将读指针重新定位到文件开头
inFile.read(buffer,size); //读取大小为 sizeof(ch)字节的数据存放到数组ch中
outFile.write(buffer,size);
delete [] buffer;
inFile.close(); //关闭文件
outFile.close(); //关闭文件
cout<<"Copy from in.txt fo out.txt Finish!"<<endl;
system("pause"); //暂停
return 0;
}
/*将一个文件的内容逐个字符拷贝进第二个文件*/
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream inFile; //输入流对象
ofstream outFile; //输出流对象
char ch; //字符变量定义
inFile.open("in.txt",ios::in); //将输入流对象和读入文件建立关联,以文本方式打开
outFile.open("out.txt",ios::out); //将输出流对象和输出文件建立关联
//循环对读入文件逐个字符进行读入,然后写入到输出文件中
while(inFile.get(ch)) //循环到读入EOF--文件结束标记
outFile.put(ch); //逐个字符输出到输出文件
inFile.close(); //关闭文件
outFile.close(); //关闭文件
cout<<"Copy from in.txt fo out.txt Finish!"<<endl;
system("pause"); //暂停
return 0;
}
(2)文本方式--逐行拷贝
/*将一个文件的内容逐行字符串拷贝进第二个文件*/
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
int main()
{
ifstream inFile; //输入流对象
ofstream outFile; //输出流对象
char ch[200]; //字符数组
inFile.open("in.txt",ios::in); //将输入流对象和读入文件建立关联,以文本方式打开
outFile.open("out.txt",ios::out); //将输出流对象和输出文件建立关联
//循环对读入文件逐行字符串进行读入,然后写入到输出文件中
while(!inFile.eof()) //循环读入每行直到遇到文件结束
{ inFile.getline(ch,sizeof(ch),'\n');
outFile.write(ch,strlen(ch));
outFile.write("\n",1); //因为getline设置的是遇到回车结束,因此'\n'读不进来,因此需要在输出ch后,再输出一个'\n'来表示行结束
//outFile<<ch<<'\n';可替代上两句
}
inFile.close(); //关闭文件
outFile.close(); //关闭文件
cout<<"Copy from in.txt fo out.txt Finish!"<<endl;
system("pause"); //暂停
return 0;
}
(3)二进制方式--逐块拷贝
/*将一个文件的内容以二进制方式逐块拷贝到第二个文件
注意:要考虑最后一次读取块的情况,因为最后一次块读取时,真实读取的大小可能会小于希望读取的大小。
read( )函数
从流中读取字符串的成员函数read
该成员函数一般形式是: read(char* pch, int nCount)
从输入流中读取nCount个字符。
当输入流中的字符数小于nCount时,结束读取。经常使用read函数读取二进制数据。
write( )函数
成员函数write()输出一串字符。
该成员函数一般形式是:write(char* pch, int nCount)
其中,pch是指向字符数组的指针;nCount指明从第一个参数中复制输出字符的个数。
gcount( )函数
输入流对象的成员函数,获取确定提取的字符数
当程序从文件流中提取字符时,可能需要确切知道提取的字符数,可以使用gcount( )函数
使用方式:输入流对象.gcount()
*/
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
int main()
{
ifstream inFile; //输入流对象
ofstream outFile; //输出流对象
char ch[200]; //字符数组
long int size;
inFile.open("in.txt",ios::in|ios::binary); //将输入流对象和读入文件建立关联,以二进制方式打开
outFile.open("out.txt",ios::out|ios::binary); //将输出流对象和输出文件建立关联,以二进制方式打开
//循环对读入文件逐块进行读入,然后写入到输出文件中
while(!inFile.eof()) //循环读入直到遇到文件结束
{ inFile.read(ch,sizeof(ch)); //读取大小为 sizeof(ch)字节的数据存放到数组ch中
size=inFile.gcount(); //获取真实提取的字符数,最最后一次提取时,可能会出现size和sizeof(ch)的值不一致的情况
outFile.write(ch,size<sizeof(ch)?size:sizeof(ch));
}
inFile.close(); //关闭文件
outFile.close(); //关闭文件
cout<<"Copy from in.txt fo out.txt Finish!"<<endl;
system("pause"); //暂停
return 0;
}
(4)二进制方式-一次性拷贝
/*将一个文件的内容以二进制方式一次性拷贝到第二个文件
注意:先获取文件大小,然后再动态创建内存空间来存放文件内容
read( )函数
从流中读取字符串的成员函数read
该成员函数一般形式是: read(char* pch, int nCount)
从输入流中读取nCount个字符。
当输入流中的字符数小于nCount时,结束读取。经常使用read函数读取二进制数据。
write( )函数
成员函数write()输出一串字符。
该成员函数一般形式是:write(char* pch, int nCount)
其中,pch是指向字符数组的指针;nCount指明从第一个参数中复制输出字符的个数。
*/
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
int main()
{
ifstream inFile; //输入流对象
ofstream outFile; //输出流对象
char *buffer; //字符指针
long int size;
inFile.open("in.txt",ios::in|ios::binary|ios::ate); //将输入流对象和读入文件建立关联,以二进制方式打开,并定位读指针为文件尾
outFile.open("out.txt",ios::out|ios::binary); //将输出流对象和输出文件建立关联,以二进制方式打开
//循环对读入文件逐块进行读入,然后写入到输出文件中
size=inFile.tellg();
cout<<size<<endl;
buffer=new char[size]; //动态开辟空间,以便存放要读取的文件内容
inFile.seekg(0,ios::beg); //将读指针重新定位到文件开头
inFile.read(buffer,size); //读取大小为 sizeof(ch)字节的数据存放到数组ch中
outFile.write(buffer,size);
delete [] buffer;
inFile.close(); //关闭文件
outFile.close(); //关闭文件
cout<<"Copy from in.txt fo out.txt Finish!"<<endl;
system("pause"); //暂停
return 0;
}
相关文章推荐
- C语言学习007:重定向标准输入和输出
- C++面向对象编程分享06----20160404_李楚煌
- C++ Primer 读书笔记-ch02
- 【day0404 C++】类的成员函数
- C++多态公有继承
- 为什么Windows 系统中用反斜杠表示路径,而C语言教材中都是用斜杠表示头文件的路径?
- #pragma once与#ifndef #define #endif的区别
- c/c++实现简单计算器
- c++智能指针的不断演化
- c++ map按key或value的值分别进行排序
- 关于qsort函数
- C++访问限制:private public protect经典诠释
- C++常用用法总结
- c++类中的六种默认函数
- 一些C++ STL泛型算法整理
- void类型及void指针
- c++内存分配方式
- MFC——ComBox用法大全
- [hihoCoder 1187] Divisors (微软预科生计划-探星夏令营在线测试)
- 【转】C++ 常量类型 const 详解