文件目錄和目錄文件的作用區別和聯繫 & C語言文件相關操作 FILE用法

一.文件目錄和目錄文件的作用區別和聯繫

1.他們各自的概念和聯繫
文件目錄:把所有的FCB組織在一起,就構成了文件目錄,即文件控制塊的有序集合
**FCB:**爲了能對一個文件進行正確的存取,操作系統必須爲文件設置用於描述和控制文件的數據結構,稱之爲“文件控制塊(FCB)”。
**目錄文件:**爲了實現對文件目錄的管理,通常將文件目錄以文件的形式保持在外存,這個文件就叫目錄文件。

二:C語言爲什麼要先open打開文件, 最後close關閉文件,爲什麼不直接read+文件名讀文件

首先我們要先了解文件指針
文件指針是指向文件有關信息的指針, 這些信息包括:文件名狀態當前位置, 他們保存在一個結構體中, 在使用時要先爲他分配空間,用來存放相關的信息, 該結構體由系統定義, C語言規定該類型爲FILE型

typedef struct
{
	short level;
	unsigned flags;
	char fd;
	unsigned char hold;
	short bsize;
	unsigned char *buffer;
	unsigned ar*curp;
	unsigned istemp;
	short tokenl;
}FILE;

在編寫程序時不用將上面內容寫出, 只需要寫以下代碼

FILE *fp;

打開文件的操作

FILE *fp;
fp = fopen(文件名, 使用方式);

即是

FILE *fp=fopen(char *filename,char *mode);
/*
filename:文件名,如“students.txt”。
mode:打開方式(讀寫方式,文件類型)
*/

文件關閉

fclose(FILE *fp)
一般,fclose(fp)應與fopen配對使用,特別是含有寫方式的文件,若不關閉,可能會造成文件數據丟失。

配合文件指針可以進行一系列的操作
1.單字節輸入輸出 fgetc, fputc
2.字符串輸入輸出 fgets, fputs
3.格式化讀寫 fscanf, fprintf

ch = fprintf(文件類型指針, 格式化字符串, 輸出列表);
例如:
fprintf(fp, "%d", i);
他的作用是將整型變量i以%d的格式輸出到fp指向的文件中
相反
fscanf(fp, "%d", &i);
讀入fp所指向文件中的i值

4 整塊讀寫 fread fwrite

fread(buffer, size, count, fp);
從fp所指向的文件中讀入count次, 每次讀寫size字節, 讀入的信息存在buffer中

fwrite(buufer, size, count, fp);
將buffer的地址開始的信息輸出count次, 每次寫size字節到fp所指向的文件中

5.指針移動, 實現隨機讀取

#include <stdio.h>
int main()
{  
    FILE *fp;
    int c;
    fp=fopen("handsomehuang.txt","r");
    fgetc(fp);
    fgetc(fp);
    rewind(fp);//文件指針重置爲0 
    printf("%c",fgetc(fp));
    fclose(fp);
}

檢測文件是否讀到末尾

#include <stdio.h>
int main()
{  
   FILE *fp;
   fp=fopen("handsomehuang.txt","r");
   while(!feof(fp))
   {   printf("%c",fgetc(fp));
   }
   fclose(fp);
}
/*
feof是C語言標準庫函數,其原型在stdio.h中,其功能是檢測流上的文件結束符,如果文件結束,則返回非0值,否則返回0(即,文件結束:返回非0值,文件未結束,返回0
*/

6.文件的定位 fseek函數

fseek(文件類型指針, 位移量, 起始點);

該函數的作用是移動文件內部的位置指針。其中,“ 文件類型指針”指向被移動的文件:“位移量”表示移動的字節數,要求位移量是long型數據,以便在文件長度大於64KB時不會出錯。當用常量表示位移量時,要求加後綴 “L";“起始點”表示從何處開始計算位移量,規定的起始點有文件首、文件當前位置和文件尾3種
在這裏插入圖片描述

fseek(fp,-20L,1);

表示將位置指針從當前位置向後退20個字節。

7.ftell函數

ftell函數的一般形式如下:
long ftell(文件類型指針);

該函數的作用是得到流式文件中的當前位置,用相對於文件開頭的位移量來表示。當返回值是-1L 時, 表示出錯

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章