#include?stdio.h
員工經(jīng)過長(zhǎng)期磨合與沉淀,具備了協(xié)作精神,得以通過團(tuán)隊(duì)的力量開發(fā)出優(yōu)質(zhì)的產(chǎn)品。創(chuàng)新互聯(lián)公司堅(jiān)持“專注、創(chuàng)新、易用”的產(chǎn)品理念,因?yàn)椤皩W⑺詫I(yè)、創(chuàng)新互聯(lián)網(wǎng)站所以易用所以簡(jiǎn)單”。公司專注于為企業(yè)提供成都網(wǎng)站建設(shè)、網(wǎng)站制作、微信公眾號(hào)開發(fā)、電商網(wǎng)站開發(fā),小程序開發(fā),軟件按需策劃等一站式互聯(lián)網(wǎng)企業(yè)服務(wù)。
void?main(int?argc,char?*argv[])?//命令行參數(shù)
{
int?ch;//定義文件類型指針
FILE?*fp;//判斷命令行是否正確
if(argc!=2)
{
printf("Error?format,Usage:?display?filename1\n");
return;?//鍵入了錯(cuò)誤的命令行,結(jié)束程序的執(zhí)行
}
//按讀方式打開由argv[1]指出的文件
if((fp=fopen(argv[1],"r"))==NULL)
{
printf("The?file?%s?can?not?be?opened.\n",argv[1]);//打開操作不成功
return;//結(jié)束程序的執(zhí)行
}
//成功打開了argv[1]所指文件
ch=fgetc(fp);?//從fp所指文件的當(dāng)前指針位置讀取一個(gè)字符
while(ch!=EOF)?//判斷剛讀取的字符是否是文件結(jié)束符
{
putchar(ch);?//若不是結(jié)束符,將它輸出到屏幕上顯示
ch=fgetc(fp);?//繼續(xù)從fp所指文件中讀取下一個(gè)字符
}?//完成將fp所指文件的內(nèi)容輸出到屏幕上顯示
fclose(fp);?//關(guān)閉fp所指文件
}
C語言標(biāo)準(zhǔn)庫提供了一系列文件I/O函數(shù)用于文件操作,比如fopen()用于打開文件、fread()、fwrite()用于讀寫文件、fseek()用于設(shè)置操作位置等等,一般C語言教程上都有文件I/O一章,細(xì)致內(nèi)容,可以找本教科書學(xué)習(xí)一下。 下面的示例,是向名為1.txt的文件附加hello world字符串。
#include stdio.h
#include string.h
int main()
{
FILE *fp = fopen("1.txt", "a+");
if (fp==0)
{
printf("can't open file\n");
return 0;
}
fseek(fp, 0, SEEK_END);
char sz_add[] = "hello world\n";
fwrite(sz_add, strlen(sz_add), 1, fp);
fclose(fp);
return 0;
}
或
#includestdio.h
struct stu
{
char name[10];
int num;
int age;
char addr[15];
}boya[2],boyb[2],*pp,*qq;
main(){
FILE *fp;
char ch;
int i;
pp=boya;
qq=boyb;
if((fp=fopen("stu_list","wb+"))==NULL){
printf("Cannot open file strike any key exit!");
getch();
exit(1);
}
printf("\ninput data\n");
for(i=0;i2;i++,pp++)
scanf("%s%d%d%s",pp-name,pp-num,pp-age,pp-addr);
pp=boya;
for(i=0;i2;i++,pp++)
fprintf(fp,"%s %d %d %s\n",pp-name,pp-num,pp-age,pp-addr);
rewind(fp);
for(i=0;i2;i++,qq++)
fscanf(fp,"%s %d %d %s\n",qq-name,qq-num,qq-age,qq-addr);
printf("\n\nname\tnumber age addr\n");
qq=boyb;
for(i=0;i2;i++,qq++)
printf("%s\t%5d %7d %s\n",qq-name,qq-num, qq-age,qq-addr);
fclose(fp);
}
用C語言實(shí)現(xiàn)文件讀寫操作
二、直接I/O文件操作
這是C提供的另一種文件操作,它是通過直接存/取文件來完成對(duì)文件的處理,而上篇所說流式文件操作是通過緩沖區(qū)來進(jìn)行;流式文件操作是圍繞一個(gè) FILE指針來進(jìn)行,而此類文件操作是圍繞一個(gè)文件的“句柄”來進(jìn)行,什么是句柄呢?它是一個(gè)整數(shù),是系統(tǒng)用來標(biāo)識(shí)一個(gè)文件(在WINDOWS中,句柄的概念擴(kuò)展到所有設(shè)備資源的標(biāo)識(shí))的唯一的記號(hào)。此類文件操作常用的函數(shù)如下表,這些函數(shù)及其所用的一些符號(hào)在io.h和fcntl.h中定義,在使用時(shí)要加入相應(yīng)的頭文件。
函數(shù) 說明
open() 打開一個(gè)文件并返回它的句柄
close() 關(guān)閉一個(gè)句柄
lseek() 定位到文件的指定位置
read() 塊讀文件
write() 塊寫文件
eof() 測(cè)試文件是否結(jié)束
filelength() 取得文件長(zhǎng)度
rename() 重命名文件
chsize() 改變文件長(zhǎng)度
下面就對(duì)這些函數(shù)一一說明:
1.open()
打開一個(gè)文件并返回它的句柄,如果失敗,將返回一個(gè)小于0的值,原型是int open(const char *path, int access [, unsigned mode]); 參數(shù)path是要打開的文件名,access是打開的模式,mode是可選項(xiàng)。表示文件的屬性,主要用于UNIX系統(tǒng)中,在DOS/WINDOWS這個(gè)參數(shù)沒有意義。其中文件的打開模式如下表。
符號(hào) 含義 符號(hào) 含義 符號(hào) 含義
O_RDONLY 只讀方式 O_WRONLY 只寫方式 O_RDWR 讀/寫方式
O_NDELAY 用于UNIX系統(tǒng) O_APPEND 追加方式 O_CREAT 如果文件不存在就創(chuàng)建
O_TRUNC 把文件長(zhǎng)度截為0 O_EXCL 和O_CREAT連用,如果文件存在返回錯(cuò)誤 O_BINARY 二進(jìn)制方式
O_TEXT 文本方式
對(duì)于多個(gè)要求,可以用"|"運(yùn)算符來連接,如O_APPEND|O_TEXT表示以文本模式和追加方式打開文件。
例:int handle=open("c:\\msdos.sys",O_BINARY|O_CREAT|O_WRITE)
2.close()
關(guān)閉一個(gè)句柄,原型是int close(int handle);如果成功返回0
例:close(handle)
3.lseek()
定位到指定的位置,原型是:long lseek(int handle, long offset, int fromwhere);參數(shù)offset是移動(dòng)的量,fromwhere是移動(dòng)的基準(zhǔn)位置,取值和前面講的fseek()一樣,SEEK_SET:文件首部;SEEK_CUR:文件當(dāng)前位置;SEEK_END:文件尾。此函數(shù)返回執(zhí)行后文件新的存取位置。
例:
lseek(handle,-1234L,SEEK_CUR);//把存取位置從當(dāng)前位置向前移動(dòng)1234個(gè)字節(jié)。
x=lseek(hnd1,0L,SEEK_END);//把存取位置移動(dòng)到文件尾,x=文件尾的位置即文件長(zhǎng)度
4.read()
從文件讀取一塊,原型是int read(int handle, void *buf, unsigned len);參數(shù)buf保存讀出的數(shù)據(jù),len是讀取的字節(jié)。函數(shù)返回實(shí)際讀出的字節(jié)。
例:char x[200];read(hnd1,x,200);
5.write()
寫一塊數(shù)據(jù)到文件中,原型是int write(int handle, void *buf, unsigned len);參數(shù)的含義同read(),返回實(shí)際寫入的字節(jié)。
例:char x[]="I Love You";write(handle,x,strlen(x));
7.eof()
類似feof(),測(cè)試文件是否結(jié)束,是返回1,否則返回0;原型是:int eof(int handle);
例:while(!eof(handle1)){……};
8.filelength()
返回文件長(zhǎng)度,原型是long filelength(int handle);相當(dāng)于lseek(handle,0L,SEEK_END)
例:long x=filelength(handle);
9.rename()
重命名文件,原型是int rename(const char *oldname, const char *newname); 參數(shù)oldname是舊文件名,newname是新文件名。成功返回0
例:rename("c:\\config.sys","c:\\config.w40");
10.chsize();
改變文件長(zhǎng)度,原型是int chsize(int handle, long size);參數(shù)size表示文件新的長(zhǎng)度,成功返回0,否則返回-1,如果指定的長(zhǎng)度小于文件長(zhǎng)度,則文件被截短;如果指定的長(zhǎng)度大于文件長(zhǎng)度,則在文件后面補(bǔ)''\0''。
例:chsize(handle,0x12345);
;
網(wǎng)站欄目:c語言中的文件讀寫函數(shù),c語言中的文件讀寫函數(shù)是什么
URL鏈接:http://muchs.cn/article42/hcpshc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營(yíng)銷型網(wǎng)站建設(shè)、企業(yè)網(wǎng)站制作、企業(yè)建站、虛擬主機(jī)、建站公司、移動(dòng)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)