在C语言中,对于文件的操作是利用FILE结构体进行的。

几个常用的操作文件函数简介

1:打开文件 FILE *fopen( const char *filename, const char *mode );   

第一个参数是指向文件名字符串常量的指针类型;

第二个参数指定文件打开的模式。

文件打开模式:

r:读取,如果文件不存在,函数调用失败;

w:为写入操作打开一个空文件。若文件不存在,则创建一个文件;若给定的文件已经存在,那么它的内容将被清空;

a:为写入操作打开文件。若文件不存在,则首先创建一个文件;若文件存在,那么在该文件结尾添加新数据,在写入数据之前,不会移除已有的EOF标记;

r+:打开文件用于写入操作和读取操作,文件必须存在;

w+:写入和读取,其他同w;

a+:打开文件用于读取和添加操作,其他同a。

注:打开文件后一般会做一些文件的读取或者写入操作,若文件打开失败,接下来的读写动作也无法顺利进行,所以一般在fopen()后作错误判断及处理。

  1. #include<stdio.h>
  2. main()
  3. {
  4. FILE * pFile=fopen("zkd","r");
  5. if(pFile==NULL) return;
  6. fclose(pFile);
  7. return 0;
  8. }
2:文件的写入 size_t fwrite( const void *buffer, size_t  size, size_t count, FILE *stream )

第一个参数:指向将要被写入文件的数据;

第二个参数:以字节为单位的项的大小。size_t类型,实际上就是unsigned int型;

第三个参数:将要被写入的项的最大数目;

注:即保证写入数据大小为第二个参数和第三个参数之积即可。

第四个参数:指向FILE类型的指针,通过fopen获得。

3:刷新缓冲区 fflush( FILE *stream )

C语言对文件的操作使用了缓存文件系统,即系统自动为每个正在使用的文件在内存中开辟了一块缓存区域,从内存向磁盘文件写入的数据先送到内存中的这个缓冲区,直到缓冲区的数据装满以后,才把数据一起送到磁盘文件上。

    FILE *pFile=fopen("zkd.txt","w");
if (pFile==NULL)
return ;
fwrite("I love you!",,strlen("I love you!"),pFile);
fflush(pFile);

4:文件的关闭 fclose( FILE *stream )

关闭文件,此时也会将缓冲区内容写入磁盘,但是和fflush相比,接下来若想对文件读写,则必须再次打开文件。

5:文件指针定位 int fseek( FILE *stream, long offset, int origin);

在C语言文件操作中,将有一个文件指针,该指针会随时根据我们对文件的操作来移动位置,始终指向下一个将要写人的位置;

第二个参数:偏移量(和文件指针的位置相比)

第三个参数:指定文件指针的起始位置,可以取三个值:

SEEK_CUR:从文件当前位置处开始;

SEEK_END:从文件结尾处开始;

SEEK_SET:从文件开始处开始。

6:文件的读取 size_t fread( void *buffer, size_t size, size_t count, FILE *stream)

第一个参数:指向存放数据的缓冲区;

其他的同fwrite();

7:获取文件长度方法 long ftell( FILE *stream )

函数 ftell 用于得到文件位置指针当前位置相对于文件首的偏移字节数

先利用fseek函数将文件指针移动到文件的结尾处,然后利用ftell函数就可以得到文件的长度。

fseek(pFile,0,SEEK_END);

int len=ftell(pFile);

len即为文件长度

                #include "stdafx.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h> int _tmain(int argc, _TCHAR* argv[])
{
FILE *pFile=fopen("zkd.txt","r");
if (pFile==NULL)
return ;
fwrite("I love you!",,strlen("I love you!"),pFile);
fflush(pFile);
fseek(pFile,,SEEK_END);
int len=ftell(pFile);
char *ch=(char*)malloc(len+);
// memset(ch,0,100);
rewind(pFile);
fread(ch,,len,pFile);
ch[len]='\0';
printf("%s",ch);
fclose(pFile);
return ;
}

注意点:

文件的打开与关闭是配套的,有文件的打开就有文件的关闭。

在对文件进行读写时,需要注意文件位置指针,文件位置指针来控制文件读写的位置,例如是在最开始读写还是在最后面读写。例如当我们调用fgetc()读取一个字符,文件位置指针就会自动指向下一个字节。

文件指针文件位置指针是不同的两个概念,文件指针指向整个文件结构,而文件位置指针指向文件读写的位置。

参考文章:https://blog.csdn.net/clh19901213/article/details/18269989

C语言对文件的基本操作的更多相关文章

  1. c语言文件的基本操作

    c语言对文件的操作主要分为:按字符操作,按行操作,按内存块操作 主要的函数: fopen(): FILE * fopen(_In_z_ const char * _Filename, _In_z_ c ...

  2. BMP头文件格式以及C语言读取头文件【转】

    BMP头文件格式以及C语言读取头文件[转] (2011-12-24 22:59:17) 转载▼ 标签: 杂谈 分类: 各个领域的知识 BMP图像文件由三部分组成:位图文件头数据结构,它包含BMP图像文 ...

  3. c语言头文件中定义全局变量的问题

    c语言头文件中定义全局变量的问题 (转http://www.cnblogs.com/Sorean/) 先说一下,全局变量只能定义在 函数里面,任意函数,其他函数在使用的时候用extern声明.千万不要 ...

  4. C 语言 .h文件的作用

    C语言头文件的作用 最近在工作当中遇到了一点小问题,关于C语言头文件的应用问题,主要还是关于全局变量的定义和声明问题.学习C语言已经有好几年了,工作使用也近半年了,但是对于这部分的东西的确还没有深入的 ...

  5. 嵌入式C语言头文件的建立与使用

    如何正确编写 C 语言头文件和与之相关联的 c 源程序文件,这首先就要了解它们的各自功能. 要理解 C 文件与头文件(即.h)有什么不同之处,首先需要弄明白编译器的工作过程. 一般说来编译器会做以下几 ...

  6. C语言基础文件读写操作

    整理了一份C语言的文件读写件操作代码,测试时打开相应的注释即可. #include <stdio.h> #include <stdlib.h> #include <uni ...

  7. 51单片机C语言学习笔记6:51单片机C语言头文件及其使用

    很多初学单片机者往往对C51的头文件感到很神秘,而为什么要那样写,甚至有的初学者喜欢问,P1口的P为什么要大写,不大写行不行呢?其实这个是在头文件中用sfr定义的,现在定义好了的是这样的 sfr P1 ...

  8. C语言头文件

    最近在工作当中遇到了一点小问题,关于C语言头文件的应用问题,主要还是关于全局变量的定义和声明问题.学习C语言已经有好几年了,工作使用也近半年了,但是对于这部分的东西的确还没有深入的思考过.概念上还是比 ...

  9. Python之文件的基本操作

    在python中,对文件的基本操作一共有如下四种: 1.打开文件 file_obj = open("文件路径","模式") 常用的打开文件模式有: r:以只读方 ...

随机推荐

  1. PCL学习八叉树

    建立空间索引在点云数据处理中有着广泛的应用,常见的空间索引一般 是自顶而下逐级划分空间的各种空间索引结构,比较有代表性的包括BSP树,KD树,KDB树,R树,四叉树,八叉树等索引结构,而这些结构中,K ...

  2. Reordering the columns in a data frame

    Problem You want to do reorder the columns in a data frame. Solution # A sample data frame data < ...

  3. Qt之创建自定义类型

    摘要: 简述 当使用Qt创建用户界面时,特别是那些带有特殊控制和特征的界面时,开发者通常需要创建新数据类型来扩展或替换Qt现有的的值类型集合. 标准类型,比如:QSize.QColor和QString ...

  4. SAP SD 顾问面试问题 consultant interview questionnaire

    以下是我个人目前面试团队 SD顾问问题的小结,希望对大家有所帮助, 也可能有回答错误的地方,希望同行不吝赐教. 也希望各位顾问们讲你们遇到的一些面试问题做个跟贴,方便大家共同进步,谢谢.   面试问题 ...

  5. e786. 创建JSpinner组件

    This example demonstrates how to build three kinds of spinners. A number spinner: // Create a number ...

  6. unity提高----------射线使用【unity3d 怎样获得当前鼠标点击的对象】

    unity3d 怎样获得当前鼠标点击的对象 最佳答案   var ray = Camera.main.ScreenPointToRay (Input.mousePosition);var hit : ...

  7. C#-----------------------------回收机制中Destroy与null的作用

    关于Object被Destroy之后,该Object的原引用==null的问题 标签: unityc#继承对象 2017-01-23 23:32 506人阅读 评论(0) 收藏 举报  分类: Uni ...

  8. (转)小议TCP的MSS(最大分段)以及MTU

    [前言]漫漫51长假,没有好的去处,只能每日上网消遣,某日逛到NBO灌水,见一帖曰:无法通过2514路由器上MSN(出口为ADSL线路,通过PPPoE)吾心想,ADSL---PPPoE,那肯定就是MT ...

  9. C#绘制数字图像灰度直方图

    灰度直方图是灰度的函数,描述的是图像中具有该灰度级的像素的个数.如果用直角坐标系来表示,则它的横坐标是灰度级,纵坐标是该灰度出现的概率(像素的个数). 灰度直方图的分布函数: 其中,K是指第k个灰度级 ...

  10. 某软件大赛C#版考题整理——【编程题】

    三.编程题(4小题共40.0分)程序及结果写入对应文框内 1. 孪生素数查找程序. 所谓孪生素数指的是间隔为2 的相邻素数,就像孪生兄弟.最小的孪生素数是(3, 5),在100 以内的孪生素数还有 ( ...