文件

文件缓冲区
文件缓冲区是用以暂时存放读写期间的文件数据而在内存区预留的一定空间。使用文件缓冲区可减少读取硬盘的次数。
g etchar()函数进行字符的输入,并不是直接从键盘这个硬件中读取输入的字符,而是从“输入缓冲区”中得到的字符。
件的特点:数据可以长久保存
文件的存在形式 1)字符形式(ASCII)例如 文本形式 2)二进制形式 例如 照片 word
定义文件指针
打开文件文件指针
FILE*pFile=fopen("绝对路径","打开方式"); 
打开方式
FILE* pFile = NULL;
fopen_s(&pFile,"G:\\a.txt","r+");
注意VS2002更高的版本不能用fopen打开会认为是不安全的用fopen_s(FILE**,"路径","打开方式”)路径是绝对路径并且不能是从属性中直接粘贴复制来的那样容易发生错误 路径中的'\'容易当成转义字符所以遇到'\'要再加一个\
读文件 
size_t fread(放到哪个地址,多大,几个(几块,几次),从那个文件读)//一般多大定义的都是1 
  FILE* pFile = NULL;
  fopen_s(&pFile,"G:\\a.txt","r+");
 char str[10] = {0};
 char str1[10] = {0};
 int nRead = fread(str,1,5,pFile);
 fread(str1,1,3,pFile);
 printf("%s\n",str);
 printf("%s\n",str1);

fread函数的返回值是几块  读文件的时候函数的指针是移动的的第二次接着读的时候接上一次的
写文件
size_t fread(从那个地址起,多大,几个,写入那个文件)
FILE* pFile = NULL;
fopen_s(&pFile,"G:\\a.txt","r+");
fwrite("abc",1,3,pFile);
//写文件的时候注意文件的打开方式也就是权限 
为r+的时候是直接写写几个覆盖文件开头的几个
为w/w+是会将原来的文件删除重新写入 
还要注意可以连续读取可以连续写但是不能读完写写完读 

fseek的用途:控制文件指针偏移。

函数原型:int fseek(FILE *stream, long offset, int fromwhere)

参数1是文件流指针,参数2是偏移量大小,参数3是偏移模式,通常为1:SEEK_CUR(文件当前位置) SEEK_SET(文件开头) SEEK_END(文件结尾)
fseek()函数可以实现读写的连续问题  
fseek(pFile,0,SEEK_CUR); 
在操作完文件的时候一定不要忘了关闭文件 
fclose(pFile);

字符形式文件的拷贝问题

#include <stdio.h>

int main()
{
 FILE* pFile = NULL;
 FILE* pf = NULL;
 char c;
 fopen_s(&pFile,"g:\\1.txt","r+");//一个读
 fopen_s(&pf,"g:\\2.txt","w+");//一个写
 
 while((c = getc(pFile)) != EOF)//EOF表示文件的结束
 {
  putc(c,pf);
 }
 fclose(pFile);
 fclose(pf);
 return 0;
}
函数说明  putc()会将参数c转为unsigned char后写入参数stream指定的文件中。虽然putc()与fputc()作用相同,但putc()为宏定义,非真正的函数调用。
返回值  putc()会返回写入成功的字符,即参数c。若返回EOF则代表写入失败 
函数说明  getc()用来从参数stream所指的文件中读取一个字符。若读到文件尾而无数据时便返回EOF。虽然getc()与fgetc()作用相同,但getc()为宏定义,非真正的函数调用。 
返回值  getc()会返回读取到的字符,若返回EOF则表示到了文件尾。
 

二进制文件的拷贝

#include <stdio.h>

int main()
{
 FILE* pf1 = NULL;
 FILE* pf2 = NULL;
 char buf[1024];
 int nRead;
 fopen_s(&pf1,"g:\\第一小节.chm","rb");//注意这里的权限加上r
 fopen_s(&pf2,"g:\\1.chm","wb");
 while(1)
 {
  nRead = fread(buf,1,1024,pf1);//这就是为什么一次读取一个这样函数的返回值就会变成读取了多少
  if(nRead <= 0)
  {
   break;
  }
  fwrite(buf,1,nRead,pf2);
 }
 fclose(pf1);
 fclose(pf2);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值