最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一文搞懂C語言中的文件操作

 更新時(shí)間:2022年11月19日 14:56:16   作者:小馬學(xué)習(xí)代碼  
文件操作想必大家掌握的并不熟練,確實(shí)因?yàn)槲覀冇玫牟⒉欢?,而本?jié)內(nèi)容能夠讓大家初步認(rèn)識(shí)文件操作,從文件認(rèn)識(shí)到文件使用,讓我們對(duì)c語言文件操作有個(gè)初步的了解

一、文件操作

1、 為什要使用文件操作

在c語言中我們完成一個(gè)程序后,他并不會(huì)對(duì)我們的數(shù)據(jù)進(jìn)行保存,就像我上一篇文章中實(shí)現(xiàn)一個(gè)通訊錄人員的增刪插改中數(shù)據(jù)只是短暫的保存,而當(dāng)程序退出后的同時(shí)人員信息也就銷毀了,在此執(zhí)行程序的時(shí)候人員信息并沒有保存,而這是為什呢?是因?yàn)槲覀儓?zhí)行程序時(shí)我們寫的代碼信息數(shù)據(jù)不是持久化的,而要讓他持久化就要用到文件操作,將我們寫的數(shù)據(jù)存到文件中,而文件信息是存放到硬盤當(dāng)中的,這樣就達(dá)到了信息的持久化,也就在此使用時(shí)信息還是進(jìn)行了一個(gè)保存。

2、什么是文件

2.1概念

存放在磁盤的文件就是文件。文件分為兩種:數(shù)據(jù)文件,程序文件。

2.1.1程序文件:

包括源程序文件(后綴為.c),目標(biāo)文件(windows環(huán)境后綴為.obj),可執(zhí)行程序(windows環(huán)境 后綴為.exe)。

2.1.2數(shù)據(jù)文件:

文件的內(nèi)容不一定是程序,而是程序運(yùn)行時(shí)讀寫的數(shù)據(jù),比如程序運(yùn)行需要從中讀取數(shù)據(jù)的文件, 或者輸出內(nèi)容的文件。

2.2文件名

一個(gè)文件要有一個(gè)唯一的文件標(biāo)識(shí),以便用戶識(shí)別和引用。

文件名包含3部分:文件路徑+文件名主干+文件后綴

例如: c:\code\test.txt 為了方便起見,文件標(biāo)識(shí)常被稱為文件名。

3、文件操作的使用

3.1文件操作的打開和關(guān)閉

文件在讀寫之前應(yīng)該先打開文件,在使用結(jié)束之后應(yīng)該關(guān)閉文件。 在編寫程序的時(shí)候,在打開文件的同時(shí),都會(huì)返回一個(gè)FILE*的指針變量指向該文件,也相當(dāng)于建立了指 針和文件的關(guān)系。

ANSIC 規(guī)定使用fopen函數(shù)來打開文件,fclose來關(guān)閉文件。  

#include <stdio.h>
#include<errno.h>
#include<string.h>
int main()
{
    FILE*p=fopen("Contact.txt","w"); //打開文件輸入文件地址,和打開方式
    if(p==NULL) //如果傳入空指針則會(huì)報(bào)錯(cuò)
    {
        printf("%s", strerror(errno));
    }
    fclose(p); //關(guān)閉文件
    p=NULL;  //防止變?yōu)橐爸羔?
    return 0;
}

3.2文件使用方式為

3.3文件的順序讀寫

3.3.1fputc:

#include <stdio.h>
#include<errno.h>
#include<string.h>
int main()
{
    FILE*p=fopen("Contact.txt","w");
    if(p==NULL)
    {
        printf("%s", strerror(errno));
    }
    for(char i='a';i<'z';i++)
    {
        fputc(i,p);  //像文件中寫入數(shù)據(jù),寫入的是單個(gè)字節(jié)
    }
    
    fclose(p);
    p=NULL;
    return 0;
}

3.3.2 fgetc:

#include <stdio.h>
#include<errno.h>
#include<string.h>
int main()
{
    FILE*p=fopen("Contact.txt","r");
    if(p==NULL)
    {
        printf("%s", strerror(errno));
    }
    for(char i='a';i<'z';i++)
    {
        printf("%c ",fgetc(p)); //從文件中獲得數(shù)據(jù)打印出來
    }
    
    fclose(p);
    p=NULL;
    return 0;
}

3.3.3 fputs:

#include <stdio.h>
#include<errno.h>
#include<string.h>
int main()
{
    FILE*p=fopen("Contact.txt","w");//寫入文件數(shù)據(jù)用w,讀取數(shù)據(jù)用r
    if(p==NULL)
    {
        printf("%s", strerror(errno));
    }
 
    fputs("hello world ",p); //向代碼中寫入字符串
    
    fclose(p);
    p=NULL;
    return 0;
}

3.3.4fgets:

#include <stdio.h>
#include<errno.h>
#include<string.h>
int main()
{
    FILE*p=fopen("Contact.txt","r");//寫入文件數(shù)據(jù)用w,讀取數(shù)據(jù)用r
    if(p==NULL)
    {
        printf("%s", strerror(errno));
    }
 
    char arr[20]={0};
    fgets(arr,15,p);
         printf("%s\n",arr);
    
    fclose(p);
    p=NULL;
    return 0;
}

3.3.5fprintf:

#include <stdio.h>
#include<errno.h>
#include<string.h>
int main()
{
    FILE*p=fopen("Contact.txt","w");//寫入文件數(shù)據(jù)用w,讀取數(shù)據(jù)用r
    if(p==NULL)
    {
        printf("%s", strerror(errno));
    }
 
    char arr[20]={"hello xiaoma"};
    fprintf(p,"%s",arr);
    
    
    fclose(p);
    p=NULL;
    return 0;
}

3.3.6fscanf:

#include <stdio.h>
#include<errno.h>
#include<string.h>
int main()
{
    FILE*p=fopen("Contact.txt","r");//寫入文件數(shù)據(jù)用w,讀取數(shù)據(jù)用r
    if(p==NULL)
    {
        printf("%s", strerror(errno));
    }
 
   char arr[20]={0};
    fscanf(p,"%s",arr);
    printf("%s\n",arr);
    
    
    fclose(p);
    p=NULL;
    return 0;
}

3.3.7fwrite:

#include <stdio.h>
#include<errno.h>
#include<string.h>
int main()
{
    FILE*p=fopen("Contact.txt","wb");//寫入文件數(shù)據(jù)用w,讀取數(shù)據(jù)用r wb是以二進(jìn)制的方式寫,rb是以二進(jìn)制的方式讀
    if(p==NULL)
    {
        printf("%s", strerror(errno));
    }
 
    char arr[20]={"hello world"};
    for(int i=0;i<sizeof(arr)/sizeof(arr[0]);i++)
    {
    fwrite(arr+i,sizeof(arr[0]),1,p); //一次寫入一個(gè)元素,寫入類型為char型
    }
    
    fclose(p);
    p=NULL;
    return 0;
}

3.3.8fread:

#include <stdio.h>
#include<errno.h>
#include<string.h>
int main()
{
    FILE*p=fopen("Contact.txt","rb");//寫入文件數(shù)據(jù)用w,讀取數(shù)據(jù)用r wb是以二進(jìn)制的方式寫,rb是以二進(jìn)制的方式讀
    if(p==NULL)
    {
        printf("%s", strerror(errno));
    }
    char arr[20]={0};
    fread(arr,sizeof(arr),1,p);
    printf("%s\n",arr);
    fclose(p);
    p=NULL;
    return 0;
}

3.4文件的隨機(jī)讀寫

3.4.1fseek:

根據(jù)文件指針的位置和偏移量來定位文件指針

#include <stdio.h>
#include<errno.h>
#include<string.h>
int main()
{
    FILE*p=fopen("/Users/mamenghao/Desktop/Contact.txt","rb");//寫入文件數(shù)據(jù)用w,讀取數(shù)據(jù)用r wb是以二進(jìn)制的方式寫,rb是以二進(jìn)制的方式讀
    if(p==NULL)
    {
        printf("%s", strerror(errno));
    }
    fseek(p,2,SEEK_SET);  //SEEK_SET 偏移量從頭開始
                           // SEEK_CUR 偏移量從你上一次的位置開始
                           // SEEK_END //偏移量從尾開始
    int ch =fgetc(p);
    printf("%c ",ch);
     fclose(p);
    p=NULL;
    return 0;
}

3.4.2ftell:

返回文件指針相對(duì)于起始位置的偏移量

#include <stdio.h>
#include<errno.h>
#include<string.h>
int main()
{
    FILE*p=fopen("/Users/mamenghao/Desktop/Contact.txt","rb");//寫入文件數(shù)據(jù)用w,讀取數(shù)據(jù)用r wb是以二進(jìn)制的方式寫,rb是以二進(jìn)制的方式讀
    if(p==NULL)
    {
        printf("%s", strerror(errno));
    }
    fseek(p,2,SEEK_SET);  //SEEK_SET 偏移量從頭開始
                        // SEEK_CUR 偏移量從你上一次的位置開始
                           // SEEK_END //偏移量從尾開始
    printf("%ld\n",ftell(p)); //這就打印了當(dāng)前偏移量
    int ch =fgetc(p);
    printf("%c ",ch);
     fclose(p);
    p=NULL;
    return 0;
}

3.4.3rewind:

讓文件指針的位置回到文件起始位置

#include <stdio.h>
#include<errno.h>
#include<string.h>
int main()
{
    FILE*p=fopen("/Users/mamenghao/Desktop/Contact.txt","rb");//寫入文件數(shù)據(jù)用w,讀取數(shù)據(jù)用r wb是以二進(jìn)制的方式寫,rb是以二進(jìn)制的方式讀
    if(p==NULL)
    {
        printf("%s", strerror(errno));
    }
    fseek(p,2,SEEK_SET);  //SEEK_SET 偏移量從頭開始
                        // SEEK_CUR 偏移量從你上一次的位置開始
                           // SEEK_END //偏移量從尾開始
    printf("%ld\n",ftell(p)); //這就打印了當(dāng)前偏移量
    rewind(p); //使偏移量回到了起始位置
    printf("%ld\n",ftell(p)); //在次打印偏移量的位置來確定是否回到起始位置
    int ch =fgetc(p);
    printf("%c ",ch);
     fclose(p);
    p=NULL;
    return 0;
}

總結(jié)

對(duì)于文件操作并不是特別難,主要是我們對(duì)于文件操作不習(xí)慣的原因,讓我們覺得文件操作很難,只要我么熟悉掌握fputc fgetc fputs fgets fprintf fscanf fwrite fread 這些函數(shù)的使用方法,文件操作也就容易理解啦,主要是在于操作,我們可以在下面把每一個(gè)都操作一下?。?!

到此這篇關(guān)于一文搞懂C語言中的文件操作的文章就介紹到這了,更多相關(guān)C語言文件操作內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言深入詳解四大內(nèi)存函數(shù)的使用

    C語言深入詳解四大內(nèi)存函數(shù)的使用

    這篇文章主要介紹了C語言的四大內(nèi)存函數(shù),講解了mencpy、memmove、memcmp、memset函數(shù),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-07-07
  • C語言多線程開發(fā)中死鎖與讀寫鎖問題詳解

    C語言多線程開發(fā)中死鎖與讀寫鎖問題詳解

    死鎖是指多個(gè)線程因競爭資源而造成的僵局(互相等待);有些公共數(shù)據(jù)修改的機(jī)會(huì)很少,但其讀的機(jī)會(huì)很多。并且在讀的過程中會(huì)伴隨著查找,給這種代碼加鎖會(huì)降低我們的程序效率。讀寫鎖可以解決這個(gè)問題;
    2022-05-05
  • C語言深入淺出講解順序表的實(shí)現(xiàn)

    C語言深入淺出講解順序表的實(shí)現(xiàn)

    線性表是最簡單的數(shù)據(jù)結(jié)構(gòu),而順序表又是最簡單的線性表,其基本思想是用一段地址連續(xù)的儲(chǔ)存單元依次存儲(chǔ)線性表的數(shù)據(jù)元素,比如我們常用的一維數(shù)組,下面代碼實(shí)現(xiàn)了順序表的定義以及基本操作
    2022-04-04
  • va_list(),va_start(),va_arg(),va_end() 詳細(xì)解析

    va_list(),va_start(),va_arg(),va_end() 詳細(xì)解析

    這些宏定義在stdarg.h中,所以用到可變參數(shù)的程序應(yīng)該包含這個(gè)頭文件.下面我們寫一個(gè)簡單的可變參數(shù)的函數(shù),該函數(shù)至少有一個(gè)整數(shù)參數(shù),第二個(gè)參數(shù)也是整數(shù),是可選的.函數(shù)只是打印這兩個(gè)參數(shù)的值
    2013-09-09
  • 深度揭秘C++面向?qū)ο缶幊讨欣^承的核心概念

    深度揭秘C++面向?qū)ο缶幊讨欣^承的核心概念

    我們知道C語言是面向過程的編程語言,C++在C語言的基礎(chǔ)上進(jìn)化出了面向?qū)ο蟮哪P停^承就是面向?qū)ο蟮闹匾獙傩?,下面就讓小編來和大家詳?xì)講講吧
    2023-07-07
  • C++ BloomFilter布隆過濾器應(yīng)用及概念詳解

    C++ BloomFilter布隆過濾器應(yīng)用及概念詳解

    布隆過濾器是由布隆(Burton Howard Bloom)在1970年提出的 一種緊湊型的、比較巧妙的概率型數(shù)據(jù)結(jié)構(gòu),特點(diǎn)是高效地插入和查詢,可以用來告訴你 “某樣?xùn)|西一定不存在或者可能存在”,它是用多個(gè)哈希函數(shù),將一個(gè)數(shù)據(jù)映射到位圖結(jié)構(gòu)中
    2023-03-03
  • C++實(shí)現(xiàn)LeetCode(92.倒置鏈表之二)

    C++實(shí)現(xiàn)LeetCode(92.倒置鏈表之二)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(倒置鏈表之二),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 一篇文章帶你了解C語言:入門基礎(chǔ)(2)

    一篇文章帶你了解C語言:入門基礎(chǔ)(2)

    這篇文章主要介紹了C語言入門之基礎(chǔ)知識(shí)詳解,文中有非常詳細(xì)的C語言使用教程及相關(guān)基礎(chǔ)知識(shí),對(duì)正在學(xué)習(xí)c語言的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-08-08
  • OpenCV圖像處理之圖像拼接詳解

    OpenCV圖像處理之圖像拼接詳解

    本文主要介紹了如何使用C++?OpenCV實(shí)現(xiàn)圖像景拼接,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)OpenCV有一定的幫助,感興趣的可以了解一下
    2022-08-08
  • C語言二叉樹與堆的概念與實(shí)現(xiàn)

    C語言二叉樹與堆的概念與實(shí)現(xiàn)

    這篇文章主要給大家介紹了關(guān)于C語言二叉樹與堆的相關(guān)資料,文章詳細(xì)記錄了他們的相關(guān)概念以及如何實(shí)現(xiàn)的,通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2021-06-06

最新評(píng)論

鞍山市| 蚌埠市| 苏尼特左旗| 博野县| 砚山县| 巴林左旗| 新龙县| 肃北| 潍坊市| 江都市| 淮北市| 南昌市| 兴宁市| 讷河市| 稷山县| 北辰区| 青龙| 宜君县| 香格里拉县| 昆山市| 安达市| 高清| 波密县| 新丰县| 洪泽县| 安宁市| 南召县| 莱西市| 敖汉旗| 五家渠市| 南丹县| 当阳市| 婺源县| 尚志市| 安陆市| 阿坝| 克什克腾旗| 定结县| 靖江市| 涪陵区| 贵德县|