i/o流常控制符

i/o流常控制符inti;
  file1>>i;//从文件输入一个整数值。

  这种方式还有一种简单的格式化能力,比如可以指定输出为16进制等等,具体的格式有以下一些

操纵符功能输入/输出
dec格式化为十进制数值数据输入和输出
endl输出一个换行符并刷新此流输出
ends输出一个空字符输出
hex格式化为十六进制数值数据输入和输出
oct格式化为八进制数值数据输入和输出
setpxecision(intp)设置浮点数的精度位数输出

  比如要把123当作十六进制输出:file1<<hex<<123;要把3.1415926以5位精度输出:file1<<setpxecision(5)<<3.1415926。

  2、二进制文件的读写
①put()
  put()函数向流写入一个字符,其原型是ofstream&put(charch),使用也比较简单,如file1.put('c');就是向流写一个字符'c'。

②get()
  get()函数比较灵活,有3种常用的重载形式:

  一种就是和put()对应的形式:ifstream&get(char&ch);功能是从流中读取一个字符,结果保存在引用ch中,如果到文件尾,返回空字符。如file2.get(x);表示从文件中读取一个字符,并把读取的字符保存在x中。

  另一种重载形式的原型是:intget();这种形式是从流中返回一个字符,如果到达文件尾,返回EOF,如x=file2.get();和上例功能是一样的。

   还有一种形式的原型是:ifstream&get(char*buf,intnum,chardelim='\n');这种形式把字符 读入由buf指向的数组,直到读入了num个字符或遇到了由delim指定的字符,如果没使用delim这个参数,将使用缺省值换行符' \n'。例如:

  file2.get(str1,127,'A');//从文件中读取字符到字符串str1,当遇到字符'A'或读取了127个字符时终止。

③读写数据块
  要读写二进制数据块,使用成员函数read()和write()成员函数,它们原型如下:

    read(unsignedchar*buf,intnum);
    write(constunsignedchar*buf,intnum);

   read()从文件中读取num个字符到buf指向的缓存中,如果在还未读入num个字符时就到了文件尾,可以用成员函数 intgcount();来取得实际读取的字符数;而write()从buf指向的缓存写num个字符到文件中,值得注意的是缓存的类型是 unsignedchar*,有时可能需要类型转换。

例:

    unsignedcharstr1[]="ILoveYou";
    intn[5];
    ifstreamin("xxx.xxx");
    ofstreamout("yyy.yyy");
    out.write(str1,strlen(str1));//把字符串str1全部写到yyy.yyy中
    in.read((unsignedchar*)n,sizeof(n));//从xxx.xxx中读取指定个整数,注意类型转换
    in.close();out.close();

四、检测EOF
  成员函数eof()用来检测是否到达文件尾,如果到达文件尾返回非0值,否则返回0。原型是inteof();

例:  if(in.eof())ShowMessage("已经到达文件尾!");

五、文件定位
   和C的文件操作方式不同的是,C++I/O系统管理两个与一个文件相联系的指针。一个是读指针,它说明输入操作在文件中的位置;另一个是写指针,它下 次写操作的位置。每次执行输入或输出时,相应的指针自动变化。所以,C++的文件定位分为读位置和写位置的定位,对应的成员函数是seekg()和 seekp(),seekg()是设置读位置,seekp是设置写位置。它们最通用的形式如下:

    istream&seekg(streamoffoffset,seek_dirorigin);
    ostream&seekp(streamoffoffset,seek_dirorigin);

  streamoff定义于iostream.h中,定义有偏移量offset所能取得的最大值,seek_dir表示移动的基准位置,是一个有以下值的枚举:

ios::beg:  文件开头
ios::cur:  文件当前位置
ios::end:  文件结尾
  这两个函数一般用于二进制文件,因为文本文件会因为系统对字符的解释而可能与预想的值不同。

例:

    file1.seekg(1234,ios::cur);//把文件的读指针从当前位置向后移1234个字节
    file2.seekp(1234,ios::beg);//把文件的写指针从文件开头向后移1234个字节

你可能感兴趣的:(ios,C++,c,C#)