真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

【C語(yǔ)言--文件】(詳細(xì)解讀)-創(chuàng)新互聯(lián)

【C語(yǔ)言--文件】
    • 文件
      • 程序文件
      • 數(shù)據(jù)文件
      • 文件名
      • 文件類型
      • 文件緩沖區(qū)
      • 文件指針
      • 操作文件
        • 文件的打開(kāi)和關(guān)閉
        • 文件的順序讀寫(xiě)
        • 文件的隨機(jī)讀寫(xiě)
        • 文件結(jié)束判定

創(chuàng)新互聯(lián)建站是一家專業(yè)提供東洲企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站建設(shè)、成都做網(wǎng)站H5響應(yīng)式網(wǎng)站、小程序制作等業(yè)務(wù)。10年已為東洲眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)絡(luò)公司優(yōu)惠進(jìn)行中。文件

磁盤(pán)上的文件,文件是一種存放數(shù)據(jù)的媒介
一般在程序設(shè)計(jì)中,文件分為兩種:程序文件和數(shù)據(jù)文件。

程序文件

.c .h(源程序文件).obj(目標(biāo)文件).exe(可執(zhí)行程序文件)類的文件,能夠被執(zhí)行,被編譯
程序文件可以操作數(shù)據(jù)文件

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

可以被操作,是程序運(yùn)行時(shí)讀寫(xiě)的數(shù)據(jù)

文件名

包含三部分:文件路徑+文件主干名+文件后綴
eg:c:\user\test.txt

文件類型

數(shù)據(jù)文件分為:文本文件和二進(jìn)制文件

文件緩沖區(qū)

ANSIC標(biāo)準(zhǔn)采用“緩沖文件系統(tǒng)”處理數(shù)據(jù)文件,[系統(tǒng)自動(dòng)在內(nèi)存中為程序中每一個(gè)正在使用的文件開(kāi)辟一塊文件緩沖區(qū)]
從內(nèi)存向磁盤(pán)輸出數(shù)據(jù),會(huì)先放在緩沖區(qū),如果緩沖區(qū)放滿了再一起放入磁盤(pán);從磁盤(pán)文件讀取數(shù)據(jù),會(huì)先輸入到內(nèi)存緩沖區(qū),裝滿緩沖區(qū)再逐個(gè)送入數(shù)據(jù)區(qū)(緩沖區(qū)大小由C編譯器決定)
在這里插入圖片描述

文件指針

也稱“文件類型指針”,在輸出數(shù)據(jù)文件時(shí)需要先裝滿磁盤(pán),所以要有存儲(chǔ)數(shù)據(jù)文件,程序會(huì)自動(dòng)建立一個(gè)文件信息區(qū)[存放數(shù)據(jù)文件的相關(guān)信息]
文件信息區(qū)是用來(lái)存放文件相關(guān)信息的,這些信息保存在一個(gè)結(jié)構(gòu)體類型的變量中,F(xiàn)ILE類型,系統(tǒng)中有定義(編譯器不同結(jié)構(gòu)體中成員有所差異,不過(guò)都是大同小異的),我們要維護(hù)相關(guān)信息就得定義一個(gè)FILE*型的變量(文件指針)
通過(guò)文件指針可以找到與它關(guān)聯(lián)的文件
在這里插入圖片描述


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

文件使用之前要打開(kāi)文件,使用之后要關(guān)閉文件
【1】打開(kāi)文件
使用函數(shù)fopen()
FILE* fopen(const char* filename,const char* mode)
參數(shù)包括:文件名+打開(kāi)方式
打開(kāi)方式包括:
在這里插入圖片描述
在這里插入圖片描述

寫(xiě)法:
1.相對(duì)路徑
fopen(“test.txt”,“r”);
//表示在當(dāng)前路徑的同級(jí)路徑下
…/ 表示上一級(jí)路徑
fopen(“…/test.txt”,“r”);
//表示在上一級(jí)路徑下
fopen(“…/…/test.txt”,“r”);
//表示在上上級(jí)路徑下
2.絕對(duì)路徑
fopen(“C:\code\store\Project2\test.txt”,“r”);
//通過(guò)轉(zhuǎn)義字符讀取‘\’
【2】關(guān)閉文件
int fclose(FILE* stream)

#include#include//打開(kāi)文件
FILE* pf=fopen("test.txt","r");
if(pf==NULL)//可能打開(kāi)失敗返回空指針,用strerror函數(shù)打印錯(cuò)誤
{
    printf("%s\n",strerror(errno));
    return 0;
}
//打開(kāi)成功
//讀取文件
//關(guān)閉文件
fcolse(pf);//傳值調(diào)用并不會(huì)改變pf本身,因此需要另外置空釋放空間
pf=NULL;
文件的順序讀寫(xiě)

在這里插入圖片描述
注意:
從鍵盤(pán)輸入以及輸出到屏幕中,屏幕和鍵盤(pán)都是外部設(shè)備
鍵盤(pán)———標(biāo)準(zhǔn)輸入設(shè)備——stdin
屏幕———標(biāo)準(zhǔn)輸出設(shè)備——stdout
是一個(gè)程序默認(rèn)打開(kāi)的兩個(gè)流設(shè)備
stdin stdout stderer
這三個(gè)流是默認(rèn)打開(kāi)的都是FILE*型的

  • 字符輸出函數(shù)——寫(xiě)字符
    fputc———連接輸出流,輸出一個(gè)字符
FILE* pf=fopen("test.txt","w");
if(pf==NULL)
{
    printf("%s\n",strerror(errno));
    return 0;
}
fputc('b',pf);
fcolse(pf);//傳值調(diào)用并不會(huì)改變pf本身,因此需要另外置空釋放空間
pf=NULL;
  • 字符輸入函數(shù)——讀字符
    fgetc——連接輸入流,讀入一個(gè)字符
FILE* pf=fopen("test.txt","r");
if(pf==NULL)
{
    printf("%s\n",strerror(errno));
    return 0;
}
int ch=fgetc(pf);
printf("%c",ch);
fclose(pf);
pf=NULL;
  • 文本行輸入函數(shù)——讀文件
    fgets()函數(shù)
    char *fgets(char *string, int n, FILE *stream )
int main()
{
    char arr[100]={0};
    FILE* pf=fopen("test.txt","r");
    if(pf==NULL)
    {
        printf("%s\n",strerror(errno));
        return 0;
    }
    fgets(arr,100,pf);
    printf("%s",arr);//也可以用puts(pf);函數(shù)實(shí)現(xiàn)輸出
    fcolse(pf);
    pf=NULL;
    return 0;
}
  • 文本行輸出函數(shù)——寫(xiě)文件
    fputs()
    int fputs( const char *string, FILE *stream );
int main()
{
    char arr[100]={0};
    FILE* pf=fopen("test.txt","w");
    if(pf==NULL)
    {
        printf("%s\n",strerror(errno));
        return 0;
    }
    fputs("hello",pf);
    
    fcolse(pf);
    pf=NULL;
    return 0;
}
int main()
{
    char buf[1024]={0};
    fgets(buf,1024,stdin);//從標(biāo)準(zhǔn)輸入流讀取
    fputs(buf,stdout);//輸出到標(biāo)準(zhǔn)輸出流
    return 0;
}

這種寫(xiě)法等價(jià)于
gets(buf);
puts(buf);

  • 格式化輸入函數(shù)
    fscanf()函數(shù)
    int fscanf( FILE *stream, const char *format [, argument ]… )
    對(duì)比int scanf( const charformat [,argument]… )
    和scanf使用基本相同,但還需要傳遞一個(gè)FILE
    型的參數(shù)

  • 格式化輸出函數(shù)
    fprintf()
    int fprintf( FILE *stream, const char *format [, argument ]…)
    對(duì)比int printf( const charformat [, argument]… )
    和printf使用基本相同,但還需要傳遞一個(gè)FILE
    型的參數(shù)
    例如:fprintf(pf,“%d %f %s”,10,3.14,“hello”);

  • scanf/printf fscanf/fprintf sscanf/sprintf的區(qū)別?
    scanf/printf——針對(duì)標(biāo)準(zhǔn)輸入/輸出流的格式化輸入/輸出語(yǔ)句
    fscanf/fprintf——針對(duì)所有輸入/輸出流的格式化輸入/輸出語(yǔ)句
    sscanf/sprintf——從字符串(buffer)中讀入到tmp(相同類型結(jié)構(gòu))/將文件信息轉(zhuǎn)化為字符串(buffer)
    int sscanf( const char *buffer, const char *format [, argument ] … );
    int sprintf( char *buffer, const char *format [, argument] … );

  • 二進(jìn)制輸出
    fwrite()函數(shù)
    size_t fwrite( const void *buffer, size_t size, size_t count, FILE *stream )
    將buffer中的內(nèi)容寫(xiě)入stream

  • 二進(jìn)制輸入
    fread()函數(shù)
    size_t fread( void *buffer, size_t size, size_t count, FILE *stream )
    將stream中的內(nèi)容讀入buffer

文件的隨機(jī)讀寫(xiě)
  • fseek()函數(shù)——根據(jù)文件指針的位置和偏移量來(lái)定位文件指針
    Moves the file pointer to a specified location.
    int fseek( FILE *stream, long offset, int origin );
    offset—偏移量(單位是字節(jié))
    origin–文件指針位置,分為三種形式:
    SEEK_CUR
    Current position of file pointer
    SEEK_END
    End of file
    SEEK_SET
    Beginning of file
  • ftell()函數(shù)
    long ftell( FILE *stream );
    返回文件指針相對(duì)于起始位置的偏移量
  • rewind()函數(shù)
    void rewind( FILE *stream );
    讓文件指針回到起始位置
文件結(jié)束判定

feof()應(yīng)用于當(dāng)文件讀取結(jié)束了,判斷是讀取失敗結(jié)束還是遇到文件尾結(jié)束,而不是用來(lái)判斷文件是否結(jié)束的
EOF-end of file(定義中是-1)
文件讀取失敗perror()函數(shù)打印輸入的內(nèi)容++原因
【1】文本文件讀取結(jié)束判斷返回值為EOF(fgetc判斷)還是NULL(fgets判斷)
【2】二進(jìn)制文件讀取判斷返回值是否小于實(shí)際要讀的個(gè)數(shù)(fread判斷)

if(feof(pf))
	printf("error\n");
else if(ferror(pf))
	printf("file is end\n");

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧


網(wǎng)站欄目:【C語(yǔ)言--文件】(詳細(xì)解讀)-創(chuàng)新互聯(lián)
標(biāo)題鏈接:http://weahome.cn/article/ccgeih.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部