正文

关于文件读写的一些说明2010-01-13 11:59:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/yuqiexing/50522.html

分享到:

经典问题:使用a+b模式,能读能写,但是发现不能覆盖原有记录内容。

原因分析:凡是使用了a之后,每次写数据都会在文件末尾写,而不管你把文件指针移动到哪里。用w的话,虽说不会产生总在末尾写的情况了,但每次打开文件,都会把文件清空。应该用"r+b",这样不会清空文件,也不会总在末尾写。只不过有一点要注意,由于写入和读出都使用同一个缓冲,为了防止意外发生,在写和读之间最好先刷新一下缓冲:用fflush()、fseek()或者rewind()等函数都可以,这些函数调用时都会刷新缓冲区。唯一的缺点是要首先创建这个文件。

 

经典问题:写入文件的代码为fprintf(fp,"%d,%d",a,b);  读出文件的代码为fscanf(fp,"%d",&a); fscanf(fp,"%d",&b);   中间的逗号哪儿去了?

原因分析:无

 

经典问题:读出字符串到CString,按照一般的写法 --- CString str;fscanf(fp,“%s”,&str)

不光str会出现问题,并且会影响到后面文件的关闭,出现一些奇怪的错误,切忌切忌。应该写成fscanf(fp,“%s”,str) , 但是fscanf碰到空格就会停止,有点不好; 或者使用

 

        CString szContent;
        int nFileLength = file.GetLength();
        file.Read(szContent.GetBuffer(nFileLength),nFileLength);
        szContent.ReleaseBuffer();

 

经典问题读出字符串到string,用fgets先读出char*的buf,然后赋值,发现有换行符。通过下面这样的写法去掉换行符。

 while(fgets(buf,255,fp2))
 {
  string str(buf,strlen(buf)-1);
 }

但是有时候最后一行并没有换行符结尾,就会出问题,因此最好加上判断

 

 while(fgets(buf,255,fp2))

{

int nlength = strlen(buf);

 string str(buf,nLength);

if(str[nLength] == '\n') 

  str.erase(nLength,1);

}

 

经典问题:stat可以得到文件的大小。但是如果文件被打开(fopen)并未被关闭(fclose),在此之间写入文件的内容大小,并未由_stat得到,其得到的仍然是原始大小。小文件建议使用ftell获得,大文件通过GetFileSize得到。

 

 

陆续更新中。。。。

阅读(2155) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册