欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言實現(xiàn)對文件進行操作的示例詳解

 更新時間:2023年04月09日 09:50:41   作者:悲傷的豬大腸9  
這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)對文件進行操作的相關(guān)知識,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)C語言有一定的幫助,需要的可以參考一下

前言

文件操作

在運行程序的時候,此時數(shù)據(jù)是存放在內(nèi)存中,當(dāng)程序退出的時候,程序中的數(shù)據(jù)自然就不存在了,等下次運行程序的時候,數(shù)據(jù)又得重新錄入,我們可以用文件的辦法,把程序中的數(shù)據(jù)保存下來,只有我們自己選擇刪除數(shù)據(jù)的時候,數(shù)據(jù)才不復(fù)存在。 這就涉及到了數(shù)據(jù)持久化的問題,我們一般數(shù)據(jù)持久化的方法有,把數(shù)據(jù)存放在磁盤文件、存放到數(shù)據(jù)庫等方式。

文件指針

向文件里輸出或讀取數(shù)據(jù)需要使用文件指針的形式,每個文件指針可以用來打開一個文件,這個文件指針指向文件的文件信息區(qū)。

FILE * 變量名

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

文件使用完之后要記得關(guān)閉,不讓會占用資源,文件關(guān)閉掉之后要記得把指針置空以免出現(xiàn)野指針

//打開文件
FILE * fopen ( const char * filename, const char * mode );
//關(guān)閉文件
int fclose ( FILE * stream );

文件的打開方式

文件使用方式    文件使用方式    如果指定文件不存在

文件使用方式文件使用方式如果指定文件不存在
“r”(只讀)為了輸入數(shù)據(jù),打開一個已經(jīng)存在的文本文件出錯
“w”(只寫)為了輸出數(shù)據(jù),打開一個文本文件建立一個新的文件
“a”(追加)向文本文件尾添加數(shù)據(jù)建立一個新的文件
“rb”(只讀)為了輸入數(shù)據(jù),打開一個二進制文件出錯
“wb”(只寫)為了輸出數(shù)據(jù),打開一個二進制文件建立一個新的文件
“ab”(追加)向一個二進制文件尾添加數(shù)據(jù)出錯
“r+”(讀寫)為了讀和寫,打開一個文本文件出錯
“w+”(讀寫)為了讀和寫,建議一個新的文件建立一個新的文件
“a+”(讀寫)打開一個文件,在文件尾進行讀寫建立一個新的文件
“rb+”(讀寫)為了讀和寫打開一個二進制文件出錯
“wb+”(讀寫)為了讀和寫,新建一個新的二進制文件建立一個新的文件
“ab+”(讀寫)打開一個二進制文件,在文件尾進行讀和寫建立一個新的文件

代碼示例

#include <stdio.h>
int main()
{
    FILE *pf = fopen("test.txt",'w');
    if(pf==NULL)
    {
        perror("FOPEN:");        //對文件指針進行判斷以免返回空指針;
    }
    fput("haohaoxuexi,tiantianxiangshang",pf);
    fclose(pf);
    pf=NULL;            //文件關(guān)閉之后把指針置為空,以免出現(xiàn)野指針
}

‘ w ’ 沒有文件的情況下會新建一個文件在此程序文件夾下,可以看到文件已經(jīng)生成了。

文件讀寫函數(shù)

功能函數(shù)名適用于
字符輸入函數(shù)fgetc所有輸入流
字符輸出函數(shù)fputc所有輸出流
文本行輸入函數(shù)fgets所有輸入流
文本行輸出函數(shù)fputs所有輸出流
格式化輸入函數(shù)fscanf所有輸入流
格式化輸出函數(shù)fprintf所有輸出流
二進制輸入fread文件
二進制輸出fwrite文件

二進制方式存儲文件

二進制存儲在文件內(nèi)是查看不到具體信息的,要想在文件內(nèi)查看具體信息要選擇其他函數(shù)。

二進制形式存儲代碼示例

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <malloc.h>

struct student
{
    char name[20];
    int age;
    char adress[20];
}*s1;
int main()
{
    s1 = (struct student*)malloc(sizeof(struct student));
    if (s1 == NULL)
    {
        perror("malloc:");
        return 0;
    }
    FILE* pf = fopen("test.txt", "wb");
    if (pf == NULL)
    {
        perror("FOPEN:");   //對文件指針進行判斷以免返回空指針;
        return 0;
    }
    strcpy(s1->name, "陳獨秀");
    s1->age = 18;
    strcpy(s1->adress,"東城區(qū)箭桿胡同20號");
    fwrite(s1, sizeof(struct student), 1, pf);
    fclose(pf);
    pf = NULL;
}

結(jié)果:

可以看到文件已經(jīng)出現(xiàn)了部分亂碼,還能看到文字的原因是文本文件打開的時候默認(rèn)以一種編碼形式打開,將本來存到文本里的二進制信息進行了解碼。

對文件進行拷貝

這里要注意\需要再用\轉(zhuǎn)義,否則是轉(zhuǎn)義字符的意思

  • 先打開要拷貝的文件,再打開新建拷貝后的文件進行拷貝
  • 如果是圖片視頻等文件,要使用二進制的方式打開、讀取和存儲,否則文件會損壞
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <malloc.h>

int main()
{
    FILE* pfr = fopen("C:\\Users\\22763\\Pictures\\Saved Pictures\\QQ圖片20211001085735.jpg", "rb"); 		//要拷貝的文件目錄
    FILE* pfw = fopen("CopyPic.jpg", "wb");
    char temp;
    if (pfw == NULL||pfr==NULL)
    {
        perror("FOPEN:");   //對文件指針進行判斷以免返回空指針;
        return 0;
    }
    while (fread(&temp, sizeof(char), 1, pfr))
    {
        fwrite(&temp, sizeof(char), 1, pfw);
    }
    fclose(pfw);
    fclose(pfr);
    pfw = NULL;
    pfr = NULL;
}

文件隨機讀寫函數(shù)

這三個函數(shù)并不常用,所有只要知道有這三個函數(shù)就行了以及他們是干什么的就可以了,用的時候再查。

fseek

int fseek(FILE stream,long offset,int origin );

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

ftell

long ftell( FILE *stream );

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

rewind

void rewind( FILE *stream );

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

文件緩沖區(qū)

文件在讀或者寫的時候存在一個文件緩沖區(qū),因為與磁盤交互,需要一定時間(盡管很短),但是為了盡可能的節(jié)省時間,系統(tǒng)自動地在內(nèi)存中設(shè)立了文件緩沖區(qū),等攢夠一定的數(shù)據(jù),或者程序結(jié)束,一起讀或?qū)?,這樣大大提高讀寫速度,避免每個字符都要進行一次讀或?qū)憽?/p>

以上就是C語言實現(xiàn)對文件進行操作的示例詳解的詳細(xì)內(nèi)容,更多關(guān)于C語言文件操作的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 詳解C語言實現(xiàn)推箱子的基本功能(2)

    詳解C語言實現(xiàn)推箱子的基本功能(2)

    這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)推箱子的基本功能的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • C/C++混合編程之extern “C”的使用示例

    C/C++混合編程之extern “C”的使用示例

    這篇文章主要給大家介紹了關(guān)于C/C++混合編程之extern “C”使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-09-09
  • C++11顯示類型轉(zhuǎn)換的優(yōu)點

    C++11顯示類型轉(zhuǎn)換的優(yōu)點

    這篇文章主要介紹了C++11顯示類型轉(zhuǎn)換的優(yōu)點,幫助大家更好的理解和學(xué)習(xí)c++,感興趣的朋友可以了解下
    2020-08-08
  • C++代碼實現(xiàn)網(wǎng)絡(luò)Ping功能

    C++代碼實現(xiàn)網(wǎng)絡(luò)Ping功能

    這篇文章主要介紹了C++代碼實現(xiàn)網(wǎng)絡(luò)Ping功能,Ping命令被送到本地計算機的IP軟件,該命令永不退出該計算機,本文給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2021-08-08
  • 基于C語言實現(xiàn)計算生辰八字五行的示例詳解

    基于C語言實現(xiàn)計算生辰八字五行的示例詳解

    生辰八字,簡稱八字,是指一個人出生時的干支歷日期;年月日時共四柱干支,每柱兩字,合共八個字。這篇文章主要介紹了C語言實現(xiàn)計算生辰八字五行的示例代碼,需要的可以參考一下
    2023-03-03
  • c語言實現(xiàn)奇偶排序算法

    c語言實現(xiàn)奇偶排序算法

    這篇文章主要介紹了c語言實現(xiàn)奇偶排序算法,有需要的朋友可以參考一下
    2013-12-12
  • 淺析C++中的間接宏函數(shù)

    淺析C++中的間接宏函數(shù)

    這篇文章主要介紹了C++中的間接宏函數(shù),本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • 詳解C++編程中的主表達式與后綴表達式編寫基礎(chǔ)

    詳解C++編程中的主表達式與后綴表達式編寫基礎(chǔ)

    這篇文章主要介紹了C++編程中的主表達式與后綴表達式編寫基礎(chǔ),是C++入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2016-01-01
  • C語言調(diào)用攝像頭實現(xiàn)生成yuv未壓縮圖片

    C語言調(diào)用攝像頭實現(xiàn)生成yuv未壓縮圖片

    這篇文章主要為大家詳細(xì)介紹了C語言如何調(diào)用攝像頭實現(xiàn)生成yuv未壓縮圖片,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價值,感興趣的小伙伴可以參考一下
    2023-11-11
  • OpenCV實現(xiàn)Sobel邊緣檢測的示例

    OpenCV實現(xiàn)Sobel邊緣檢測的示例

    本文主要介紹了OpenCV實現(xiàn)Sobel邊緣檢測的示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08

最新評論