文件读写函数汇总

来源:互联网 发布:二进制数组转字符串 编辑:程序博客网 时间:2024/06/02 18:03

都是自己在msdn上面扒拉下来或者自己总结的,如果有哪些地方有问题请指正哦~

1.Read函数:从文件中读特定字符数,并将其放到数组中

强调:可以重复读入,比如使用过该函数之后,若再次调用该函数,不会再从头读入,而是从刚刚截断的地方开始。例如下面的例子,可以循环把文件读完

 

语法:

  istream &read( char *buffer, streamsize num );

1Bufferchar型指针或数组,否则要进行强制类型转换。如当buffer

unsigned char*时,要用(char*)&buffer

2streamsize num指读入的字节数,为int

函数read()用于输入流,在将字符放入buffer之前从流中读取num个字节。如果碰到EOFread()中止,丢弃不论多少个字节已经放入。例如:

struct {      int height;      int width;    } rectangle;        input_file.read( (char *)(&rectangle), sizeof(rectangle) );    if( input_file.bad() ) {      cerr << "Error reading data" << endl;      exit( 0 );    }

实例:

 

2.Get函数

强调:可以重复读入,比如使用过该函数之后,若再次调用该函数,不会再从头读入,而是从刚刚截断的地方开始。

语法:

  int get();  istream &get( char &ch );  istream &get( char *buffer, streamsize num );  istream &get( char *buffer, streamsize num, char delim );  istream &get( streambuf &buffer );  istream &get( streambuf &buffer, char delim );

get()函数被用于输入流,和以下这些:

读入一个字符并返回它的值,

读入一个字符并把它存储在ch

读取字符到buffer直到num - 1个字符被读入,或者碰到EOF或换行标志,

读取字符到buffer直到已读入num - 1个字符,或者碰到EOFdelim(delim直到下一次不会被读取)

读取字符到buffer中,直到碰到换行或EOF

或是读取字符到buffer中,直到碰到换行,EOFdelim(相反,delim直到下一个get()被读取 ).

例如,下面的代码一个字符一个字符的显示文件temp.txt中的内容:

    char ch;    ifstream fin( "temp.txt" );    while( fin.get(ch) )      cout << ch;     fin.close();

3.getline函数

强调:可以重复读入,比如使用过该函数之后,若再次调用该函数,不会再从头读入,而是从刚刚截断的地方开始。

delim直到下一个getline()不会被读取

语法:

  istream &getline( char *buffer, streamsize num );  istream &getline( char *buffer, streamsize num, char delim );

4.seekg函数:将光标移到制定的位置

   ostream &seekp( off_type offset, ios::seekdir origin );  ostream &seekp( pos_type position );

函数seekg()用于输入流,并且它将重新设置"get"指针到当前流的从origin偏移offset个字节的位置上,或是置"get"指针在position位置。

5.tellg:返回字符的个数

语法:

  pos_type tellg();

tellg()函数用于输入流,并返回流中"get"指针的当前位置。

注:seekgtellg配合使用用以获得文件大小

例:int GetFileSize(){                                          //获得文件大小

file_compress_in.seekg(0, ios::end);    //将光标移到文件尾,偏移量为0

int FileSize = file_compress_in.tellg();   //获得从文件头到光标处的字符量

file_compress_in.seekg(0, ios::beg);     //将光标移到文件头,偏移量为0

return FileSize;

}

6.open函数

重点:文件的打开方式

语法:  void open( const char *filename );

  void open( const char *filename, openmode mode );

函数open()用于文件流。它打开filename并将其与当前的流相关联。可以选择的模式有:

 

模式 含义

ios::app 添加输出 (所有输出添加到文件末尾,指针位置总在最后)(不能单独使用,否则无法打开)

ios::ate 当已打开时寻找到EOF

ios::binary 以二进制模式打开文件(否则表示字符串)

ios::in 为读取打开文件 (ifstream的默认打开方式,文件不存在,就无法打开文件,还是创建新文件?

ios::out 为写入打开文件 (ofstream的默认打开方式,文件不存在,则建立新文件,文件存在则直接清空文件内容)

ios::trunc 覆盖存在的文件 (读写前先将文件长度截断为0

 

注意:(1fstream默认的为ios::out|ios::in

(2)ios::in|ios::app,读追加,文件不存在就无法打开

(3)Ios::out|ios::app,写追加,文件不存在则建立新文件,文件存在则保留内容继续在末尾追加。打开文件后,文件指针在开始处,一旦即将写文件指针移到文件末尾开始完成写操作。

(4)Ios::out|ios::ate|ios::app同上述,文件指针移动到末尾

(5)Ios::in|ios::out以读写方式打开文件,文件不存在打开失败,若文件存在则可以打开,打开后文件指针在开头开始读、写

(6)读写操作不能混用,在写(读)模式中使用读(写)操作会将文件指针置空,直接关闭文件

(7)文件打开失败则调用文件流的指针,返回-1

(8)任何读写操作都会自动移动文件指针

(9)Ios::in|ios::out以可读可写的方式打开文件

如果open()失败,当用于一个布尔表达式中时,作为结果的流会给出对错误的评估。例如:

 

  ifstream inputStream("file.txt");

  if( !inputStream ) {

    cerr << "Error opening input stream" << endl;

    return;

  }

 

7.close函数

语法: void close();

Tclose()函数关闭相关的文件流。

当文件读写操作完成之后,我们必须将文件关闭以使文件重新变成可访问的。成员函数close(),它负责将缓存中的数据排放出来并关闭文件。这个函数一旦被调用,原先的流对象就可以被用来打开其他文件了,这个文件也可以被其他进程访问了。为防止流对象被销毁时还联系着打开的文件,析构函数将自动调用关闭函数close()。

 

 


0 0
原创粉丝点击