文章标题:C
原 作 者:querw
原 出 处:www.vczx.com
发 布 者:querw
发布类型:原创
发布日期:2004-10-05
今日浏览:8
总 浏 览:144
// 国庆没事写着玩的,英文很烂,请把注意力集中在代码上,呵呵:)
// c++基于流的文件操作使很多C转过来的程序员在操作文件时还是选择了 FILE*
// :)其实,C++的流操作文件也很方便啊
// 下面这个例子就是文件使用实例代码
#pragma warning(disable:4786)
#include <IOSTREAM>
#include <FSTREAM>
#include <string>
using namespace std;
int main()
{
// using std::cout;
// using std::endl;
cout<<" ********************* C ++ file opration demo ***********************"<<endl;
cout<<"using fstream or ifstream and ofstream"<<endl;
cout<<"fstream derive from istream and ostream, so most of method were defined in"<<endl;
cout<<"istream and ostream"<<endl;
cout<<"By the way, I like C style \"FILE *\" indeed. :)"<<endl;
// Input file demo
cout<<endl;
cout<<"****Part 1: Input file demo****"<<endl;
fstream /*ifstream*/ infile;
// antoher way to declare special class or function in a namespace
using std::string;
string strfilename;
cout<<"Input In FileName:"<<endl;
cin>>strfilename;
infile.open(strfilename.c_str(),ios::in/*openmode*/);
// succeed?
if(!infile)
{
cout<<"Cannot open file:"<<strfilename<<endl;
return 1;
}
// read a byte
char ch1,ch2;
infile.get(ch1);
ch2 = infile.get();
// read a line
// get(char *,int max_size,char dimiliter) can do the same word as getline()
// but get() doesn't drop the dimiliter,
// use ignore() to drop the dimiliter(the last byte,'\n' by default)
char pszLine[1024];
memset(pszLine,0,1024);
infile.getline(pszLine,1024/*read count*/,'\n'/*read until reach '\n'*/);
// seek function
// seekg means seek for getting use for input file
infile.seekg(0/*offsize*/,ios_base::beg/*seek from ios_base::beg ios_base::cur ios_base::end*/);
// read to a buffer
infile.read(pszLine,1024);
// get readed size
int nReadedSize = infile.gcount();
// tell the position also tellg() and tellp()
// tellg() before read() and tellg() after read() then you can get the readed size
// return -1 if eof() turn true
int nCurPos = infile.tellg();
// test end ?
if(infile.eof())
{
cout<<"input file reach file end"<<endl;
}
infile.close();
// output file demo
cout<<"****Part 2: Output file demo *****"<<endl;
fstream /*ofstream */outfile;
outfile.open("out.txt",ios::out);
if(!outfile)
{
cout<<"Cannot open out file out.txt."<<endl;
return 1;
}
// write a byte
char chout = 'a';
outfile.put(chout);
// write buffer
outfile.write(pszLine,strlen(pszLine));
// like ifstream ,seekp(),tellp()
outfile.seekp(10,ios_base::beg);
char buffer[] = "seekp and write a buffer";
outfile.write(buffer,strlen(buffer));
nCurPos = outfile.tellp();
outfile.close();
return 0;
}