fopen() 与 CreateFile() 操作文件

  好长时间了,一直想搞明白fopen() 与 CreateFile() 对文件操作的异同,没有下决心去弄,忙忙就忘掉了,今天从网上找些东西,查查这个问题.
 
      我估计fopen()的底层实现就是通过CreateFile(),相似的,CFile 中的open() 成员函数也是一样通过 CreateFile实现.下面是问专家的回答.

      问题: 用fopen()函数生成一个文件和用CreateFile()函数生成一个文件,这两个文件有什么不同?c/c++中的标准库函数如fread() fwrite fseek() fslose()能否可用?是否有功能类似API的函数也可用?请专家赐教非常感谢!!! 

       答案: 使用API和标准库函数都可以生成文本文件和二进制文件,在这点上没有区别。同fread()对应的是ReadFile,同fwrite()对应的是WriteFile,同fseek()对应的是SetFilePointer,同fclose对应的是CloseHandle。两套函数都可以使用,你熟悉哪个用哪个。不过API函数可以读写Windows的设备文件,功能更多一些。

打开文件的几种方式的比较:

1     fopen(TEXT("test.txt"),TEXT("r"));     //char 
      _tfopen(TEXT("test.txt"),TEXT("r"));   //TCHAR (unsigned long)
      CFile.open(TEXT("test.txt"),CFile::modeCreate , &ex ) //CFile::modeCreate | CFile::modeWrite ,CFileException ex;
      CreateFile(TEXT("test.txt"),GENERIC_READ,0,NULL, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);

2     fopen(TEXT("test.txt"),TEXT("w"));     //char 
      _tfopen(TEXT("test.txt"),TEXT("w"));   //TCHAR (unsigned long)
      CFile.open(TEXT("test.txt"),CFile::modeCreate | CFile::modeWrite| CFile::modeCreate, &ex ) 
      CreateFile(TEXT("test.txt"),GENERIC_READ,0,NULL,
                       OPEN_EXISTING|,FILE_ATTRIBUTE_NORMAL,NULL);

      如果文件打开成功则返回文件句柄,否则返回INVALID_HANDLE_VALUE。通过GetLastError来获取错误信息,文件的关闭很简单,只需要用CloseHandle就可以关闭文件,当文件被关闭时所有缓存内数据都会被写入到磁盘。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值