當前位置:首頁 » 編程語言 » c語言標准輸入函數關閉文件
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言標准輸入函數關閉文件

發布時間: 2022-08-19 14:48:34

c語言程序設計文件打開關閉

在C語言中用一個指針變數指向一個文件,這個指針稱為文件指針。通過文件指針就可對它所指的文件進行各種操作。

定義說明文件指針的一般形式為:
FILE *指針變數標識符;
其中FILE應為大寫,它實際上是由系統定義的一個結構,該結構中含有文件名、文件狀態和文件當前位置等信息。在編寫源程序時不必關心FILE結構的細節。例如:
FILE *fp;
表示fp是指向FILE結構的指針變數,通過fp即可找存放某個文件信息的結構變數,然後按結構變數提供的信息找到該文件,實施對文件的操作。習慣上也籠統地把fp稱為指向一個文件的指針。

文件在進行讀寫操作之前要先打開,使用完畢要關閉。所謂打開文件,實際上是建立文件的各種有關信息,並使文件指針指向該文件,以便進行其它操作。關閉文件則斷開指針與文件之間的聯系,也就禁止再對該文件進行操作。

在C語言中,文件操作都是由庫函數來完成的。在本章內將介紹主要的文件操作函數。

文件的打開(fopen函數)
fopen函數用來打開一個文件,其調用的一般形式為:
文件指針名 = fopen( 文件名, 使用文件方式 );
其中:
「文件指針名」必須是被說明為FILE 類型的指針變數;
「文件名」是被打開文件的文件名;
「使用文件方式」是指文件的類型和操作要求;
「文件名」是字元串常量或字元串數組。

例如:

FILE *fp;
fp=("file a","r");
其意義是在當前目錄下打開文件file a,只允許進行「讀」操作,並使fp指向該文件。又如:

FILE *fphzk;
fphzk=("c:\\hzk16","rb");
其意義是打開C驅動器磁碟的根目錄下的文件hzk16,這是一個二進制文件,只允許按二進制方式進行讀操作。兩個反斜線「\\ 」中的第一個表示轉義字元,第二個表示根目錄。

使用文件的方式共有12種,下面給出了它們的符號和意義。

文件使用方式
意義

rt 只讀打開一個文本文件,只允許讀數據
wt 只寫打開或建立一個文本文件,只允許寫數據
at 追加打開一個文本文件,並在文件末尾寫數據
rb 只讀打開一個二進制文件,只允許讀數據
wb 只寫打開或建立一個二進制文件,只允許寫數據
ab 追加打開一個二進制文件,並在文件末尾寫數據
rt+ 讀寫打開一個文本文件,允許讀和寫
wt+ 讀寫打開或建立一個文本文件,允許讀寫
at+ 讀寫打開一個文本文件,允許讀,或在文件末追加數據
rb+ 讀寫打開一個二進制文件,允許讀和寫
wb+ 讀寫打開或建立一個二進制文件,允許讀和寫
ab+ 讀寫打開一個二進制文件,允許讀,或在文件末追加數據

對於文件使用方式有以下幾點說明。

1) 文件使用方式由r、w、a、t、b 和 + 六個字元拼成,各字元的含義是:
r(read):讀
w(write):寫
a(append):追加
t(text):文本文件,可省略不寫
b(banary):二進制文件
+:讀和寫

2) 凡用「r」打開一個文件時,該文件必須已經存在,且只能從該文件讀出。

3) 用「w」打開的文件只能向該文件寫入。若打開的文件不存在,則以指定的文件名建立該文件,若打開的文件已經存在,則將該文件刪去,重建一個新文件。

4) 若要向一個已存在的文件追加新的信息,只能用「a」方式打開文件。但此時該文件必須是存在的,否則將會出錯。

5) 在打開一個文件時,如果出錯,fopen將返回一個空指針值NULL。在程序中可以用這一信息來判別是否完成打開文件的工作,並作相應的處理。因此常用以下程序段打開文件:

if((fp=fopen("c:\\hzk16","rb")==NULL){
printf("\nerror on open c:\\hzk16 file!");
getch();
exit(1);
}
這段程序的意義是,如果返回的指針為空,表示不能打開C盤根目錄下的hzk16文件,則給出提示信息「error on open c:\ hzk16 file!」,下一行getch()的功能是從鍵盤輸入一個字元,但不在屏幕上顯示。在這里,該行的作用是等待,只有當用戶從鍵盤敲任一鍵時,程序才繼續執行,因此用戶可利用這個等待時間閱讀出錯提示。敲鍵後執行exit(1)退出程序。

6) 把一個文本文件讀入內存時,要將ASCII碼轉換成二進制碼,而把文件以文本方式寫入磁碟時,也要把二進制碼轉換成ASCII碼,因此文本文件的讀寫要花費較多的轉換時間。對二進制文件的讀寫不存在這種轉換。

7) 標准輸入文件(鍵盤),標准輸出文件(顯示器),標准出錯輸出(出錯信息)是由系統打開的,可直接使用。
文件關閉函數(fclose函數)
文件一旦使用完畢,應用關閉文件函數把文件關閉,以避免文件的數據丟失等錯誤。

fclose函數調用的一般形式是:
fclose(文件指針);
例如:
fclose(fp);
正常完成關閉文件操作時,fclose函數返回值為0。如返回非零值則表示有錯誤發生。

㈡ C語言下提供了哪些有關文件的操作

1,兩種文件存取方式(輸入,輸出方式)
順序存取
直接存取
2,數據的兩種存放形式
文本文件
二進制文件

13.2文件指針
定義文件類型指針變數的一般形式:
FILE *指針變數名;
例如:
FILE *fp1,*fp2;

13.3打開文件
在使用文件之前,需打開文件.在C里使用fopen函數打開文件.格式為:
fopen(文件名,文件使用方式);
此函數返回一個指向FILE類型的指針.如:
FILE *fp;
fp=fopen("file_1","r");
如果調用成功,fp就指向file_1,否則返回為NULL,所以為了保證文件的正確使用,要進行測試.採用如下語句:
If((fp=fopen("file_1","r"))==NULL)
{
printf("Cannot open this file\n");
exit(0);

}

最常用的文件使用方式及其含義如下:
1,"r".為讀而打開文本文件.(不存在則出錯)
2,"rb".為讀而打開二進制文件.
3,"w".為寫而打開文本文件.(若不存在則新建,反之,則從文件起始位置寫,原內容將被覆蓋)
4,"wb".為寫而打開二進制文件.
5,"a".為在文件後面添加數據而打開文本文件.(若不存在,則新建;反之,在原文件後追加)
6,"ab".為在文件後面添加數據而打開一個二進制文件.
最常用的文件使用方式及其含義如下:
7,"r+".為讀和寫而打開文本文件.(讀時,從頭開始;在寫數據時,新數據只覆蓋所佔的空間,其後不變)
8,"rb+".為讀和寫而打開二進制文件.只是在隨後的讀寫時,可以由位置函數設置讀和寫的起始位置.
9,"w+".首先建立一個新文件,進行寫操作,隨後可以從頭開始讀.(若文件存在,原內容將全部消失)
10,"wb+".功能與"w+"同.只是在隨後的讀寫時,可以由位置函數設置讀和寫的起始位置.
最常用的文件使用方式及其含義如下:
11,"a+".功能與"a"相同;只是在文件尾部添加新的數據後,可以從頭開始讀.
12,"ab+".功能與"a+"相同;只是在文件尾部添加新數據之後,可以由位置函數設置開始讀的起始位置.

13.4關閉文件
當文件的讀寫操作完成之後,使用fclose函數關閉文件.格式如下:
fclose(文件指針)
如:fclose(fp);

13.5調用getc(fgetc)和putc(fputc)函數進行輸入和輸出
1,調用putc(或fputc)函數輸出一個字元
調用形式為:
putc(ch,fp);
功能是:將字元ch寫到文件指針fp所指的文件中去.當輸出成功,putc函數返回所輸出的字元;否則,返回一個EOF值.EOF是在stdio.h庫
函數文件中定義的符號常量,其值等於-1.

13.5調用getc(fgetc)和putc(fputc)函數進行輸入和輸出
例如:把從鍵盤輸入的文本按原樣輸出到名為file_1.dat文件中,用字元@作為鍵盤輸入結束標志.
#include
Void main()
{
FILE *fpout;
char ch;
if(fpout=fpopen("file_1","w")==NULL)
{
printf("Cannot open this file!\n");
exit(0);

}

ch=getchar();
while(ch!='@')
{ fputc(ch,fpout); ch=getchar(); }
fclose(fpout);

}

2.調用getc(或fgetc)函數輸入一個字元
調用形式為:
ch=getc(pf);
功能是:從pf指定的文件中讀如一個字元,並把它作為函數值返回.
例如:把一個已存在磁碟上的file_1.dat文本文件中的內容,原樣輸出到終端屏幕上.
#include
void main(){
FILE *fpin;
char ch;
if((fpin=fopen("file_1.dat","r"))==NULL)
{ printf("Cann't open this file!\n");exit(0);}
ch=fgetc(fpin);
while (ch!=EOF)
{ putchar(ch); ch=fgetc(fpin);}
fclose(fpin);

}

13.6判斷文件結束函數feof
EOF可以作為文本文件的結束 標志,但不能作為二進制文件的結束符.feof函數既可以判斷二進制文件,又可以判斷文本文件.
例:編寫程序,用於把一個文本文件(源)復制到另一個文件(目的)中,源文件名和目的文件名由命令行輸入.命令形式如下:
可執行程序名 源文件名 目的文件名
#include
void file(FILE* ,FILE *);
void main(int argc,char *argv[]){
FILE *fpin,*fpout;
if(argc==3)
{ fpin=fopen(argv[1],"r");
fpout=fopen(argv[2],"w");
file(fpin,fpout);
fclose(fpin);fclose(fpout);

}

else if(argc>3)
printf("The file names too many!!\n";
else
printf("There are no file names for input or output!!\n );

}

void file(FILE *fpin,FILE *fpout)
{
char ch;
ch=getc(fpin);
while(!feof(fpin))
{putc(ch,fpout); ch=getc(fpin);}

}

13.7fscanf函數和fprintf函數
1,fscanf函數
fscanf只能從文本文件中按格式輸入,和scanf函數相似,只不過輸入的對象是磁碟上文本文件中的數據.調用形式為:
fscanf(文件指針,格式控制字元串,輸入項表)
例如:fscanf(fp,"%d%d",&a,&b);
fscanf(stdin,"%d%d",&a,&b);
等價於scanf("%d%d",&a,&b);
3.fprintf函數
fprintf函數按格式將內存中的數據轉換成對應的字元,並以ASCII代碼形式輸出到文本文件中.Fprintf函數和printf函數相似,只是
將輸出的內容按格式存放到磁碟的文本文件中.調用形式如下:
fprintf(文件指針,格式控制字元串,輸出項表)
如:fprintf(fp,"%d %d",x,y);
以下語句 fprintf(stdout,"%d %d",x,y)

13.8fgets函數和fputs函數
1,fgets函數
fgets函數用來從文件中讀入字元串.調用形式如下:
fgets(str,n,fp);
函數功能是:從fp所指文件中讀入n-1個字元放入str為起始地址的空間內;如果在未讀滿n-1個字元時,則遇到換行符或一個EOF結束本次讀操作,
並已str作為函數值返回.
13.8fgets函數和fputs函數
2,fputs函數
fput函數把字元串輸出到文件中.函數調用形式如下:
fputs(str,fp);
注意:為了便於讀入,在輸出字元串時,應當人為的加諸如"\n"這樣的字元串.

13.9fread函數和fwrite函數
fread and fwrite函數用來讀,寫二進制文件.它們的調用形式如下:
fread(buffer,size,count,fp);
fwrite(buffer,size,count,fp);
buffer:要輸入或輸出的數據塊的首地址
count:每讀寫一次,輸入或輸出數據塊的個數
size:每個數據塊的位元組數
fp:文件指針

13.9fread函數和fwrite函數
例如有如下結構體:
struct st{
char num[8];
float mk[5];

}pers[30];

以下循環將把這30個元素中的數據輸出到fp所指文件中.
for(i=0;i<30;i++)
fwrite(&pers[i],sizeof(struct st),1,fp);

13.9fread函數和fwrite函數
以下語句從fp所指的文件中再次將每個學生數據逐個讀入到pers數組中.
i=0;
fread(&pers[i],sizeof(struct st),1,fp);
while(!feof(fp))
{ i++;
fread(&pers[i],sizeof(struct st),1,fp);

}

13.10文件定位函數
1,fseek函數
fseek函數用來移動文件位置指針到指定的位置上,接著的讀或寫操作將從此位置開始.函數的調用形式如下:
fseek(pf,offset,origin)
pf:文件指針
offset:以位元組為單位的位移量,為長整形.
origin:是起始點,用來指定位移量是以哪個位置為基準的.
1,fseek函數
位移量的表示方法
標識符 數字 代表的起始點
SEEK_SET 0 文件開始
SEEK_END 2 文件末尾
SEEK_CUR 1 文件當前位置
假設pf已指向一個二進制文件,則;
fseek(pf,30L,SEEK_SET)
fseek(pf,-10L*sizeof(int),SEEK_END)
對於文本文件,位移量必須是0;如:
fseek(pf,0L,SEEK_SET)
fseek(pf,0L,SEEK_END)
2. ftell函數
ftell函數用以獲得文件當前位置指針的位置,函數給出當前位置指針相對於文件開頭的位元組數.如;
long t;
t=ftell(pf);
當函數調用出錯時,函數返回-1L.
我們可以通過以下方式來測試一個文件的長度:
fseek(fp,0L,SEEK_END);
t=ftell(fp);
3.rewind函數
調用形式為:
rewind(pf);
函數沒有返回值.函數的功能是使文件的位置指針回到文件的開頭.

㈢ C語言文件關閉函數fclose(文件指針)疑問

假如文件是存儲硬碟上,那麼所有內容是用磁化的方法寫的,能掉電不丟失。
你的程序將文件打開後,將其內容的第1行讀入了計算機的隨機存儲器中(具體就是line數組)
關閉文件後,文件仍然保持不變
line數組已經讀到了數據,這些數據雖然等於文件的第1行,但已經與文件沒有關系了,你使用和修改這些數據不會影響到文件,除非你再打開這個文件向里邊寫。
在編輯框中輸出的是line數組的內容,它確實與文件的第1行內容相同!以後文件內容改了,你還要輸出的話,需要再打開文件讀一遍。

㈣ c語言中文件的打開和關閉使用什麼函數

c語言的fopen函數編譯鏈接後會將代碼整合到exe文件中
api的函數編譯鏈接後只是將函數調用信息寫入,程序運行時動態鏈接
應該是這樣

㈤ c語言模擬考試中"請在此函數內打開文件,輸入測試數據,調用 fun 函數,輸出數據,關閉文件"是什麼意思

"請在此函數內打開文件,輸入測試數據,調用 fun 函數,輸出數據,關閉文件"的意思是在評卷的時候會在某個函數內按下面步驟執行代碼: 1. 打開文件, 2. 輸入數據,3,調用你考試的時候寫的函數fun, 4,指定方式輸出,5關閉文件。 其中1245都不用你管,你只要去按題目要求實現3裡面調用的fun就可以了

㈥ c語言中調用什麼函數來關閉文件

FILE *fp
fp = fopen();
fclose(fp);

int fd;
fd = open();
close(fd);

共兩種形式,自己選擇。

㈦ 為什麼C語言會出現文件關閉失敗的情況

C語言關閉文件用int fclose(FILE* fp)函數,可能有多種失敗原因。
1、錯誤的參數。傳遞給fclose的參數不是來自fopen、freopen或者tmpfile函數返回的正確文件指針。如果用上述三個函數打開文件不成功而不檢查返回的文件指針是否正確,甚至沒有給文件指針賦值,最後再傳給fclose的時候也會關閉文件失敗。
2、重復關閉文件。如果在前面的執行流程的某個分支里把文件已經關閉了,在後面重復執行fclose關閉這個文件,也導致關閉失敗。
3、磁碟空間滿或者磁碟故障。在寫文件過程中,文件內容並沒有真正存入磁碟空間,而是保留在緩沖區中,以便提高訪問速度。到關閉文件時,系統要把緩沖區中的數據真正寫入到磁碟上,如果磁碟空間滿了或者磁碟有故障,關閉文件就會失敗。
4、設備文件異常。C語言支持操作系統把各種設備虛擬成的設備文件。關閉這些設備文件時,如果設備異常(比如設備斷開了),關閉文件也可能會失敗。

㈧ 急求 c語言 文件的輸入輸出 打開 關閉 指令

#include<stdio.h>
main(){
FILE
*fp;
fp=fopen("文件名","打開方式");//打開
fclode(fp);關閉
}
讀取的函數有fscanf,fread,fput等等
輸入有fprintf,fwrite,fgets等等;
putc(char,fp);輸入一個字元
同樣getc
fwrite(p,size,n,fp);
用於輸入數據塊,p是指向數據塊的指針,size是數據塊的大小,n是輸入數據塊的個數,fp文件指針,同樣fread
fprintf(fp,"%d%d%d",a,b,c);
(就是在printf里加了個fp,其他一樣,)同樣fscanf;
其他的忘了

㈨ C語言中如何用fclose關閉一個文件

你是想關閉一個已打開用來讀/寫的文件,還是想關閉一個正在運行的程序?

我寫了一個結束進程的程序,你看看能不能用。
#include <windows.h>
#include <tlhelp32.h>

#define PROCESS_NAME "noname.exe" //在這里定義你要結束的進程名

void main()
{
int foundProcess = 0;
PROCESSENTRY32 pe32 = {sizeof(PROCESSENTRY32)};
HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
// 在進程列表中搜索,目的是為了得到對應進程的PID。
if (Process32First(hProcessSnap, &pe32))
{
do
{
if(strcmp(PROCESS_NAME, pe32.szExeFile) == 0)
{
foundProcess = 1;
break;
}
}while(Process32Next(hProcessSnap, &pe32));
}
CloseHandle(hProcessSnap);

if(foundProcess)
{
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pe32.th32ProcessID); //通過PID連接到進程
if (hProcess)
{
if(TerminateProcess(hProcess, 0)) //結束進程
{
MessageBox(NULL, "成功結束進程 \n","結束進程",MB_OK|MB_ICONASTERISK) ;
}
else
{
MessageBox(NULL, "無法結束進程 \n","結束進程",MB_OK|MB_ICONASTERISK) ;
}
CloseHandle(hProcess) ;
}
}
else
{
MessageBox(NULL, "無法找到進程 \n","結束進程",MB_OK|MB_ICONASTERISK) ;
}
}

㈩ C++ 中文件操作的幾個基本函數是什麼

1、C語言標准庫提供了一系列文件操作函數。文件操作函數一般以f+單詞的形式來命名(f是file的簡寫),其聲明位於stdio.h頭文件當中。例如:fopen、fclose函數用於文件打開與關閉;fscanf、fgets函數用於文件讀取;fprintf、fputs函數用於文件寫入;ftell、fseek函數用於文件操作位置的獲取與設置。一般的C語言教程都有文件操作一章,可以找本教材進一步學習。
2、常式:

#include<stdio.h>
inta;
charb,c[100];
intmain(){
FILE*fp1=fopen("input.txt","r");//打開輸入文件
FILE*fp2=fopen("output.txt","w");//打開輸出文件
if(fp1==NULL||fp2==NULL){//若打開文件失敗則退出
puts("不能打開文件!");
return0;
}
fscanf(fp1,"%d",&a);//從輸入文件讀取一個整數
b=fgetc(fp1);//從輸入文件讀取一個字元
fgets(c,100,fp1);//從輸入文件讀取一行字元串

printf("%ld",ftell(fp1));//輸出fp1指針當前位置相對於文件首的偏移位元組數

fputs(c,fp2);//向輸出文件寫入一行字元串
fputc(b,fp2);//向輸出文件寫入一個字元
fprintf(fp2,"%d",a);//向輸出文件寫入一個整數

fclose(fp1);//關閉輸入文件
fclose(fp2);//關閉輸出文件,相當於保存
return0;
}