zoukankan      html  css  js  c++  java
  • C语言对文件的基本操作

    在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 1;  
        fwrite("I love you!",1,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 1;  
                        fwrite("I love you!",1,strlen("I love you!"),pFile);  
                        fflush(pFile);  
                        fseek(pFile,0,SEEK_END);  
                        int len=ftell(pFile);  
                        char *ch=(char*)malloc(len+1);  
                    //  memset(ch,0,100);  
                        rewind(pFile);  
                        fread(ch,1,len,pFile);  
                        ch[len]='';  
                        printf("%s",ch);  
                        fclose(pFile);  
                        return 0;  
                    } 

    注意点:

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

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

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

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

  • 相关阅读:
    如何设置backBarButtonItem的title和action
    让navigationItem.leftBarButtonItem具有backBarButtonItem的外观样式
    在Xcode中添加空模板
    reason:'CALayer position contains NaN: [160 nan]'
    git的注册与使用:代码的版本控制器
    iOS开发零基础教程之Git的一些常用命令
    iOS开发零基础教程之生成git所需的SSH keys
    iOS开发零基础教程之在终端(Terminal)里安装oh my zsh
    iOS开发零基础教程之Homebrew的安装
    [原]ibatis 数据库时间 插入数据
  • 原文地址:https://www.cnblogs.com/mlgjb/p/8966549.html
Copyright © 2011-2022 走看看