檔案操作函式的使用和區別

2021-08-05 19:13:16 字數 4579 閱讀 1655

一、fopen  與 fclose 函式的使用

fopen 函式用於開啟乙個檔案

函式定義:file *fopen(const char *filename, const char *mode);

fopen 的返回值是乙個檔案指標,file 是在stdio.h中定義的結構體型別,封裝了與檔案相關的資訊:

struct   _iobuf   ; 

typedef   struct   _iobuf   file;

以上就是庫中file的成員內容。

fopen有兩個形參,filename表示檔案的路徑以及檔案的名字;mode指檔案的開啟方式,如下:

表  檔案操作型別

━━━━━━━━━━━━━━━━━━━━━━━━━━━━

字元 含義

────────────────────────────

"r" 開啟文字檔案唯讀

"w" 建立文字檔案只寫

"a" 增補, 如果檔案不存在則建立乙個

"r+" 開啟乙個文字檔案讀/寫

"w+" 建立乙個文字檔案讀/寫

"a+" 開啟或建立乙個檔案增補

"b" 二進位制檔案(可以和上面每一項合用)

"t" 文這檔案(預設項)

━━━━━━━━━━━━━━━━━━━━━━━━━━━━

如果要開啟乙個ccdos子目錄中, 檔名為clib的二進位制檔案, 可寫成:

fopen("c:

//ccdos

//clib", "rb");

如果成功的開啟乙個檔案, fopen()函式返回檔案指標, 否則返回空指標 (null)。由此可判斷檔案開啟是否成功。

下面舉乙個例子:
#icludemain()

這裡用到了fclose函式,明顯這是關閉檔案的函式,定義為:int fclose(file *fp);

如果關閉成功返回0,否則返回非0值。

二、fgetc() 函式與 fputc()函式
fgetc()函式定義為:int fgetc(file *fp);
該函式是從乙個唯讀或者讀寫方式開啟的檔案上讀取字元;
讀取成功返回該字元,若讀取到檔案末尾,則返回eof;
fputc()函式定義為:int fputc(int c, file *fp);
該函式用於將乙個字元寫到乙個檔案上;
成功則返回字元c,這裡說明一下int型的c只讀取低八位,所以還是乙個字元;如果寫入失敗,則返回eof;
下面舉個例子:從鍵盤輸入一串字元,存到乙個檔案中
#include #include int main()

ch = getchar();

while (ch != '\n')

fclose(fp);

return 0;

}

這裡順便提一下feof()函式,該函式定義為:int feof(file *fp);
用於檢查是否到達檔案的末尾,當檔案指標指向eof時,返回0值,否則返回非0值。
三、fgets() 函式與 gets()函式的比較,以及fputs() 函式與 puts()函式的比較
fgets()函式的定義為:char *fgets(char *s, int n, file *fp);
gets()函式的定義為:char *gets(char *s);
fgets()函式從fp所指向的檔案中讀取字串並在字串末尾新增'\0',然後存入s,最多讀取n-1個字元,n的預設值是1024。當讀取到回車換行符'\n',到達檔案末尾eof,或者讀取滿n-1個字元時,函式返回該字串的首位址。所以讀取的字串會多出乙個\n;因為出錯時返回空指標null。
所以錯誤判斷的**可以這樣寫:
while (fgets(s, n, fp))

而不能使用:
while(!feof())

如果檔案的末尾沒有\n,那麼可以使用下面乙個判斷,但是檔案的末尾加入了\n那麼第一次讀取的是string\n\0;
,若是再使用fgets函式,那麼讀取到的string直接遇到eof返回null,string的內容沒有變。
gets函式沒有限制讀取的字串的範圍,所以可能會溢位造成錯誤,並且gets函式讀取到回車鍵就結束,不會取到回車換行字元,所以相比於fgets函式長度小了一位。所以fgets函式讀取的字串可以進行這樣的操作:
s[strlen(s) - 1] = '\0';覆蓋掉\n字元。
fputs()函式定義為:int fputs(const char *s, file *fp);
用於將字串寫入檔案中,字串結束標誌'\0'不寫入,如果成功返回乙個非負數,否則返回eof;
puts()函式定義為:int puts(const char *string);
該函式等價於printf ("%s\n",s);注意puts向標準輸出裝置輸出字串並且自動換行即可。
四、scanf與fscanf 與 sscanf ; printf 與 fprintf 與 fwrite 函式的比較
scanf()

函式是格式化輸入函式,它從標準輸入裝置(

鍵盤) 讀取輸入的資訊。

定義為:

int scanf(const char * restrict format,...);

了解所有的格式化輸入內容。

fscanf()函式定義為:int fscanf(file *fp, const char *format, ...);
用於按指定的格式從檔案讀取資料,第乙個引數為檔案指標,第二個引數為格式化控制引數。

fscanf遇到空格和換行時結束,注意空格時也結束。這與fgets

有區別,fgets遇到空格不結束。

sscanf()函式:利用它可以從字串中取出整數、浮點數和字串等等。它的使用方法簡單,特別對於整數和浮點數來說。

1. 常見用法。

char str[512] = ;

sscanf("123456 ", "%s", str);

printf("str=%s\n", str);

2. 取指定長度的字串。如在下例中,取最大長度為4位元組的字串。

sscanf("123456 ", "%4s", str);

printf("str=%s\n", str);

3. 取到指定字元為止的字串。如在下例中,取遇到空格為止字串。

sscanf("123456 abcdedf", "%[^ ]", str);printf("str=%s\n", str);

4. 取僅包含指定字符集的字串。1-9和小寫字母sscanf("123456abcdedfbcdef", "%[1-9a-z]", str);

printf("str=%s\n", str);

5. 取到指定字符集為止的字串。遇到大寫字母為止的字串。

sscanf("123456abcdedfbcdef", "%[^a-z]", str);

printf("str=%s\n", str);

fprintf()函式定義為:int fprintf(file *stream, const char *format, ...);

主要功能是將指定的字串以特定的格式列印到指定的檔案中。返回值返回成功列印的字元個數,失敗時返回乙個負數。

fwrite()函式定義為: size_t fwrite(const void *ptr, size_t size, size_t nmemb, file *stream);

功能是將ptr指向的字串中nmemb個size大小的資料寫入到指向的檔案中去,寫入成功返回成功寫入的個數(不是字元個數),失敗則返回短的寫入個數或者返回0。

Linux IO函式的使用和區別

linux系統中的io函式主要有read write recv send recvmsg sendmsg readv writev,本篇主要介紹他們的使用以及區別。read函式 include ssize t read int fd,void buf,size t count read函式從檔案描述...

檔案的相關操作函式的使用

一 檔案指標的定義 file fp 定義指向檔案的指標 二 用fopen函式開啟資料檔案 fopen函式的呼叫方式為 fopen 檔案路徑名,使用檔案方式 系統定義了3個檔案指標變數stdin,stdout,stderr 分別指向標準輸入流 標準輸出流和標準出錯輸出流,可以通過這三個指標變數對以上3...

Python檔案的操作函式的使用

字元編碼 二進位制和字元之間的轉換過程 字元編碼 ascii,gbk,每個國家都有自己的編碼方式 美國電腦記憶體中的編碼方式為ascii 中國電腦記憶體中的編碼方式為gbk 美國電腦無法識別中國電腦寫的程式 中國電腦無法識別美國電腦寫的程式 現在硬碟中躺著 ascii gbk 編碼的檔案,他們的編碼...