文件操作的一些感想

这几日一直在做一些基于C的文件操作的工作,遇到了一些有意思的错误,特此记载下来,以便以后查阅!

问题一:如何向文件中写入回车换行

          方法一:

                    char ch[2];

                    ch[0] = 13;

                    ch[1] = 10;

                    fs.write(ch,sizeof(char) *2);  //fs 是fstream类型

          方法二:

                    fs.write("/r/n",(sizeof("/r/n")-1));  

问题二:在同一程序中,打开一个文件,关闭后,再打开文件(ios::app方式),试图在文件结尾写入字符串,失败,原因?

         重新打开文件后需删除文件结尾处的EOF标记

         即:fs.clear(); 

         clear()函数:

         语法:void clear( iostate flags = goodbit );

         清除与当前流相关的标志,默认标志是goodbit,它清除所有标志,否则只有制定的标志被清除。

         注:如果没有清楚标志,那么seekg,seekp函数也将失败。

问题三:tellg()函数不能得到正确的文件指针所在位置。

        tellg()函数语法:pos_type tellp();

tellp()函数用于输出流中,并返回在流中当前"put"指针的位置。 例如,下面的代码显示了当一个文件指针写入一个流的时候的情形:

string s("In Xanadu did Kubla Khan...");

  ofstream fout("output.txt");

  for( int i=0; i < s.length(); i++ ) {
    cout << "File pointer: " << fout.tellp();
    fout.put( s[i] );
    cout << " " << s[i] << endl;
  }

  fout.close();

注意:该问题造成的原因在于,tellg和tellp函数用于二进制文件中,所以在对文本文件进行操作时,返回的文件指针位置并不是正确的。即打开文件时要采用ios::binary模式。

 

 

 还存在的问题:在问题一中,方法二,为什么写入字符串的大小要-1?

                     

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值