注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

小哲

从今以后,你会是所有幸福的理由!

 
 
 

日志

 
 

文件操作(一)——文件的读写  

2012-02-12 16:16:18|  分类: MFC初级 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

C语言对文件操作的支持

一、文件的打开

FILE *fopen( 
    const char *filename, 
    const char *mode 
); 
FILE *_wfopen( 
    const wchar_t *filename, 
    const wchar_t *mode 
); 

其中第一个参数指向文件名字符串的常量指针类型,表明将要打开的文件;第二个参数指定文件打开的模式(具体查表)

二、文件的写入

Size_t fwriteconst void *buffer,size_t size,size_t count,FILE *stream;

Buffer:指向将要被写入文件的数据

Size:以字节为单位的项的大小

Count:将要被写入项的最大数目

三、文件的关闭

C语言对文件的操作使用了缓冲文件系统,具体地说就是系统自动为每个正在使用的文件在内存中开辟了一块缓冲区,从内存向磁盘文件写入的数据必须先送到内存中的这个缓冲区,直到该缓冲区装满之后,才把其中的数据一起送到磁盘上的文件中。

Fclose为文件关闭函数

四、ffulush函数

在一点需要注意的是,在程序中一旦调用了fclose函数关闭文件之后,如果需要再次访问该文件时,就需要重新打开该文件,如果程序对某个文件的访问次数比较多的话,显然这种作法就不是很方便,如果希望每次对文件操作之后不关闭它但人能将缓冲区中的数据立即写入磁盘文件中,这是可以使用fflush,这个函数的作用是将缓冲区中的数据写入到磁盘文件。

对于服务端软件来说,经常需要将各种信息写入日志中,如果使用c语言的缓冲文件系统,可能就会出现问题,例如在系统运行时突然掉电了,此时就有可能导致没有把缓冲区中的内容写入日志中。

五、文件指针定位

对于c语言的文件操作来说,他有一个文件指针,该指针会随时根据我们对为文件的操作来移动位置,时钟指向文件的下一个将要写入的位置,当执行写入操作时之后,文件指针就指向了所写数据占据位置的下一个位置,如果希望在写入数据后,返回到文件的开始位置处在写入数据,就需要将这个文件指针移动到文件开始位置,这可以利用fseek函数来实现

Int fseekFILE *stream,long offset,int orign;

六、文件的读取

对于文件的读取,首先也需要打开文件,即需要调用fopen函数得到指向FILE类型的指针,然后如果要读取文件的内容,应该调用fread函数

size_t fread( 
      void *buffer, 
     size_t size, 
     size_t count, 
    FILE *stream 
);

 
void CTest1Dlg::OnButton2() 

    // TODO: Add your control notification handler code here 
    FILE *pFile = fopen("1.txt""r"); 
    char ch[100]; 
    fread(ch, 1100, pFile); 
    fclose(pFile); 
    MessageBox(ch); 

 
乱码的现象:在c语言中,字符串是以“\0”符号结束的,在显示字符串时,系统会寻找“\0”字符,而这里定义的100个元素的字符数据:ch,它里面的数据是随机的,可能有许多数据都是不可读的,系统会从该字符数据的开始地址依次往后查找,由于在其中没有找到“\0”字符,于是他就把那些不可读的数据显示出来了,结果就是看到的乱码

方法一:

将所有数据元素在初始化的时候都设置为0

void CTest1Dlg::OnButton2() 

    // TODO: Add your control notification handler code here 
    FILE *pFile = fopen("1.txt""r"); 
    char ch[100]; 
    memset(ch, 0100); //将左右数据设置为0
    fread(ch, 1100, pFile); 
    fclose(pFile); 
    MessageBox(ch); 

方法二:

又是在读取文件时,并不知道文件的大小,所以在程序中需要获取文件的长度,然后根据这个长度来分配存放该数据的内存,可以利用c语言中的ftell函数来得到文件的长度,ftell函数将返回文件指针当前的位置,因此,可以先利用fseek函数将 文件指针移动到文件的结尾处,然后利用ftell函数就可以得到文件指针的当前的位置,也就是文件的长度。

void CTest1Dlg::OnButton2() 

    // TODO: Add your control notification handler code here 
    FILE *pFile = fopen("1.txt""r"); 
    char *pBuf; 
    fseek(pFile, 0, SEEK_END); 
    int len = ftell(pFile); 
    pBuf = new char[len+1]; 
    rewind(pFile); 
    fread(pBuf, 1, len, pFile); 
 
    pBuf[len] = 0
    fclose(pFile); 
    MessageBox(pBuf); 

需要注意的是,写入的时候应该把文件指针放在最前面

  评论这张
 
阅读(208)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017