文章目錄
關於文件的函數,一般包含在頭文件stdlib.h中;
一、標準I/O
從C Primer Plus抄了一段程序過來學習
#include<stdio.h>
#include<stdlib.h>
int main(int argc, char *argv []){
int ch; //讀取文件時,存儲每個字符的地方
FILE *fp; //文件指針
unsigned long count=0;
if(argc!=2){
printf("Usage:%s filename\n, argv[0]");
exit(EXIT_FAILURE);
}
if((fp = fopen(argv[1], "r")) == NULL){
printf("Can't open %s\n", argv[1]);
exit(EXIT_FAILURE);
}
while((ch = getc(fp) !=EOF){
putc(ch, stdout); //與putchar(ch);相同
count++;
}
fclose(fp);
printf("File %s has %lu characters\n", argv[1], count);
return 0;
}
1. fopen()函數
//fopen(“文件名”,"模式")
fp = fopen(argv[1], "r") //返回打開文件的指針,失敗爲NULL
fopen()將返回文件指針(file point),其他I/O函數可以使用這個指針指定改文件。
文件指針的類型(fp)的類型時指向FILE的指針,FILE是一個定義在stdio.h中的派生類型。
文件指針fp並不指向實際的文件,它指向一個包含文件信息的數據對象,其中包含操作文件的I/O函數所用的緩衝信息。
因爲標準庫中的I/O函數使用緩衝區,所以它們不僅要知道緩衝區的位置,還要知道緩衝區被填充的程度以及操作哪一個文件。
模式介紹
模式字符串 | 含義 |
---|---|
“r” | 以讀模式打開文件 |
“w” | 以寫模式打開文件,並把現有文件的長度截爲0,如果文件不存在,則創建一個新文件 |
“a” | 以寫模式打開文件,在現有文件末尾添加內容,如果文件不存在,則創建一個新文件 |
“r+” | 以更新模式打開文件(即可以讀寫文件) |
“w+” | 以更新模式打開文件(即,讀和寫),並把現有文件的長度截爲0,如果文件不存在,則創建一個新文件 |
“a+” | 以更新模式打開文件(即,讀和寫),在現有文件末尾添加內容,如果文件不存在,則創建一個新文件;可以讀整個文件,但只能從末尾添加內容 |
“rb”、“wb”、“ab”、“rb+”、“r+b”、“wb+”、“w+b”、“ab+“、“a+b"、”r+” | 與前面類似,但是以二進制的模式而不是文本模式打開文件 |
“wx”、”wbx”、“w+x”、“wb+x”、“w+bx” | (C11)類似非x模式,但是如果文件已存在或以獨佔模式打開,則打開文件失敗 |
2. fclose()函數
//fclose(文件指針)
fclose(fp); //關閉成功,fclose()函數返回0,失敗返回EOF即-1
3.getc()和putc()函數
getc()和putc()函數與getchar()和putchar()函數類似。所不同的是,要告訴getc()和putc()函數使用哪一個文件。
注:getchar(ch)從鍵盤獲取字符輸入,存在ch中、putchar(ch)將字符ch輸出到屏幕
注意:換行符’\n’是能夠讀出來的
ch = getc(fp); //從標準輸入中獲得一個字符
putc(ch, fpout) //把字符ch放入FILE指針fpout指定的文件中
二、文件I/O
1.fprintf()和fscanf()函數
fprintf(文件指針,格式字符串,輸出列表)
fscanf(文件指針,格式字符串,輸出列表)
如
fprintf(fp, "%d,%6.2f", i, f);
它的作用是將int型變量i和float型變量f的值按%d和%6.2f的格式輸出到fp所指向的文件中。若i=3,f=4.5,則輸出到磁盤文件上是一下字符。
3, 4.50
%6.2f表示有兩位小數,輸出佔六個位置,4.50已經佔四個位置,前面補齊兩個空格
2.fgets()和fputs()函數
fgets(str, n, fp) //讀成功,返回地址str,失敗則返回NULL
fputs(str, fp) //輸出成功返回0,否則返回非0值
fgets():從fp所指文件中讀入一個長度爲n-1的字符串,並在最後加一個’\0’字符,然後把這n個字符存在字符數組str中。
fputs():將str所指向的字符串輸出到fp所指向的文件中。
以上兩個函數類似gets()和puts()函數,只是作用的對象不同,gets()和puts()針對終端,fgets()和fputs()針對文件。