1.fputs()与f.gets()
fputs(): C 库函数 int fputs(const char *str, FILE *stream) 把字符串写入到指定的流 stream 中,但不包括空字符。
int fputs ( const char * str, FILE * stream)
#include <stdio.h>
int main ( )
{
FILE * fp;
fp = fopen ( "file.txt" , "w+" ) ;
fputs ( "这是 C 语言。" , fp) ;
fputs ( "这是一种系统程序设计语言。" , fp) ;
fclose ( fp) ;
return ( 0 ) ;
}
#include <stdio.h>
int main ( )
{
FILE * fp;
char str[ 60 ] ;
fp = fopen ( "file.txt" , "r" ) ;
if ( fp == NULL ) {
perror ( "打开文件时发生错误" ) ;
return ( - 1 ) ;
}
if ( fgets ( str, 60 , fp) != NULL ) {
puts ( str) ;
}
fclose ( fp) ;
return ( 0 ) ;
}
2.文件输入输出流ifstream与ofstream
注意: fstream.get() 与 string.get() 是两个不同的函数
in.get(buf, sz): 读取sz-1个字符到缓冲区buf过程中遇到了第3个参数(默认为’\n’)所规定的字符时,在缓冲区中写入零结束符 ,并不会将’\n‘写入缓冲区。 //Leaves \n in input 然后使用 in.get(): 读取输入流的’\n‘,相当于跳过了它
while ( in. get ( buf, sz) ) {
in. get ( ) ;
cout << buf << endl;
out << i++ << ":" << buf << endl;
}
in.getline(): 遇到输入流中的结束字符(第3个参数默认为’\n‘),会将其除去。尽管getline()与get()一样在缓冲区中写入字符零,但它不在缓冲区插入结束字符。
ifstream in ( "Strfile.out" )
while ( in. getline ( buf, sz) ) {
char * cp = buf;
while ( * cp != ':' )
++ cp;
cp + = 2 ;
cout << cp << endl;
}
3.打开模式
通过覆盖构造函数的默认参数,可以控制文件的打开模式。下表说明了控制文件打开模式的标志:
标志
功能
ios::in
打开输入文件。将这种打开模式应用于ofstream 可以使得现存文件不被截断
ios::out
打开输出文件。将这种模式应用于ofstream ,而且没有使用ios::app 、ios::ate 或ios::trunc 模式
ios::app
打开一个仅用于追加的输出文件
ios::ate
打开一个已存在文件(输入或输出),并把文件指针指向文件末尾
ios::trunc
如果文件存在,则截断旧文件
ios::binary
以二进制方式打开文件。默认打开为文本方式
4.两种在输入输出流中定位的方法
(1)绝对定位:使用 streampos 进行绝对流位置定位,需要先调用一个“告知”函数,以便知道流指针在流中的确切位置:对于ostream调用tellp(),对于istream 调用tellg() ,对于ostream 调用tellp() (p-pull写指针,g-get读指针)。 这个函数返回streampos ,用于定位流指针,对istream 对象调用seekg() ,对ostream 对象调用seekg() 。
(2)**相对定位:**使用重载版本的seekp()和seekg()函数。函数的第1个参数是要移动的字符数目(左正右负)。第2个参数是移动方向:
ios::beg
流的开始位置
ios::cur
流的当前位置
ios::end
流的末端位置