青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

C語言文件操作函數 轉

Posted on 2007-12-13 17:09 T.S Liu 閱讀(410) 評論(0)  編輯 收藏 引用 所屬分類: C++

文章分類"c/c++"里有,但只有基本說明,怕以后遺忘。看這篇相對詳細點就留下做個備忘)

C語言文件操作函數 http://www.cnblogs.com/nniixl/archive/2007/04/23/724235.aspx

分類:C/C
13.1C語言文件
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 filecopy(FILE* ,FILE *);
void main(int argc,char *argv[]){
FILE *fpin,*fpout;
if(argc==3)
{ fpin=fopen(argv[1],"r");
fpout=fopen(argv[2],"w");
filecopy(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 filecopy(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"這樣的字符串.
#include <stdio.h>
#include <iostream>
int main(int argc, char *argv[])
{
 char arr[10] ;
 char *ap = "hello!" ;
 FILE *fp ;
 if ((fp = fopen("hello.txt", "wt+")) == NULL)
 {
  printf("error!") ;
  exit(1) ;
 }
    fputs(ap, fp) ;

 rewind(fp) ; //

 fgets(arr, 10, fp) ;
 printf("%s\n", arr) ;
 fclose(fp) ;
 return 0 ;
}


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);
函數沒有返回值.函數的功能是使文件的位置指針回到文件的開頭.
 

13.10文件應用
在磁盤上的test.txt文件中放有10個不小于2的正整數,用函數調用方式編寫程序.要求實現:
1,在被調函數prime中,判斷和統計10個整數中的素數以及個數.
2,在主函數中將全部素數追加到磁盤文件test.txt的尾部,同時輸出到屏幕上.
#include
#include
Int prime(int a[],int n)
{
int I,j,k=0,flag=0;
for(i=0;i { for(j=2;j if(a[i]%j==0)
{ flag=0; break;}
else flag=1;
if(flag)
{a[k]=a[i];k++;}
}
return k;
}
void main(){
int n,I,a[10];
FILE *fp;
fp=fopen("test1-2.txt","r+");
for(n=0;n<10;n++)
fscanf(fp,"%d",&a[n]);
n=prime(a,n);
fseek(fp,o,2);
for(i=0;i {printf("%3d",a[i]);
fprintf(fp,"%3d",a[i]);
}
fclose(fp);
}
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲人成毛片在线播放| 欧美不卡三区| 久久久久久久国产| 亚洲一区网站| 亚洲毛片在线观看.| 亚洲国产高清一区| 亚洲人成在线观看网站高清| 激情国产一区二区| 国产精品分类| 国产精品捆绑调教| 国产一区二区无遮挡| 亚洲丁香婷深爱综合| 亚洲欧洲在线视频| 亚洲欧美在线高清| 久久综合久久88| 亚洲福利视频专区| 一区二区三区免费看| 欧美在线视频导航| 欧美精品激情| 国产在线乱码一区二区三区| 亚洲精品日韩精品| 欧美一区二区高清| 亚洲成色www久久网站| 夜夜嗨av一区二区三区中文字幕| 亚洲一区国产视频| 欧美成人r级一区二区三区| 欧美性大战久久久久久久| 韩国三级电影一区二区| 在线视频精品一区| 久久夜色精品亚洲噜噜国产mv | 午夜欧美视频| 欧美大片在线影院| 国外成人在线视频网站| 一区二区欧美亚洲| 欧美69视频| 一区二区三区四区五区精品| 美女性感视频久久久| 欧美精彩视频一区二区三区| 国产欧美精品一区aⅴ影院| 亚洲精品日韩在线观看| 麻豆成人综合网| 午夜精品美女久久久久av福利| 免费看黄裸体一级大秀欧美| 国产精品一级在线| 99精品视频网| 欧美韩日精品| 久久久久久久久久久久久女国产乱| 欧美日本高清一区| 亚洲成人资源| 久久天天躁夜夜躁狠狠躁2022 | 免费人成网站在线观看欧美高清| 日韩午夜电影在线观看| 欧美成年网站| 亚洲国产综合在线| 久久人体大胆视频| 亚洲一区bb| 国产精品成av人在线视午夜片| 日韩亚洲视频| 亚洲另类在线视频| 欧美日韩99| 日韩一二三区视频| 亚洲精品乱码久久久久久日本蜜臀 | 欧美国产日本在线| 久久综合亚洲社区| 亚洲国产精品ⅴa在线观看| 久久成年人视频| 性感少妇一区| 激情综合五月天| 欧美成人日韩| 欧美精品免费观看二区| 夜夜精品视频一区二区| 亚洲激情视频网| 欧美日韩亚洲成人| 午夜视频久久久| 欧美在线视频免费播放| 一区精品久久| 亚洲欧洲一区二区三区在线观看| 欧美日韩ab片| 欧美专区18| 久久久久综合网| 亚洲美女淫视频| 亚洲一级在线观看| 激情欧美一区二区三区| 亚洲福利专区| 国产精品久久久久免费a∨| 久久精品99国产精品酒店日本| 欧美在线视频日韩| 99国产精品视频免费观看一公开 | 久久亚洲二区| 在线一区二区三区四区| 午夜精品久久久久久| 影音先锋亚洲一区| 日韩一二在线观看| 国产综合久久久久久| 亚洲日本成人网| 欧美11—12娇小xxxx| 久久久久久久久久久成人| 91久久精品美女高潮| 一区二区不卡在线视频 午夜欧美不卡在 | 一区二区三区四区精品| 国产一区二区三区久久| 欧美国产视频在线| 国产精品国产三级国产a| 噜噜噜噜噜久久久久久91 | 亚洲男人第一av网站| 久久久久久久久岛国免费| 亚洲国产精品传媒在线观看| 亚洲视频在线二区| 亚洲精品国产品国语在线app| 一区二区欧美日韩| 最新国产の精品合集bt伙计| 欧美亚洲日本一区| 中文欧美在线视频| 久久人91精品久久久久久不卡| 一区二区国产精品| 久久这里只有精品视频首页| 亚洲一区二区三区在线播放| 美女视频黄免费的久久| 欧美在线视频观看| 欧美福利在线| 久久午夜电影网| 国产精品制服诱惑| 99视频精品在线| 亚洲日本国产| 久久国产精品一区二区三区四区| 午夜精品久久久久久| 欧美二区视频| 麻豆av一区二区三区久久| 国产日韩欧美日韩大片| 亚洲一级电影| 羞羞答答国产精品www一本 | 影音国产精品| 久久精品二区| 亚洲午夜电影在线观看| 欧美精品一区二区三区久久久竹菊| 久久福利精品| 国产一区二区精品在线观看| 亚洲视频狠狠| 羞羞色国产精品| 国产精品国产三级欧美二区| 日韩亚洲欧美中文三级| 99视频精品在线| 欧美日韩不卡在线| 亚洲全部视频| 一本大道av伊人久久综合| 欧美久久成人| 在线一区观看| 欧美一区二区三区的| 韩国一区二区三区在线观看| 欧美亚洲免费高清在线观看| 久久一二三国产| 亚洲人体1000| 欧美视频在线免费看| 亚洲伊人久久综合| 亚洲国产黄色片| 米奇777超碰欧美日韩亚洲| 精品不卡一区二区三区| 老鸭窝亚洲一区二区三区| 亚洲国产精品尤物yw在线观看| 91久久夜色精品国产网站| 欧美另类视频| 亚洲成色777777在线观看影院| 性18欧美另类| 国产精品美女一区二区| 夜夜嗨av一区二区三区四季av| 午夜欧美精品| 极品中文字幕一区| 欧美激情成人在线| 亚洲一区在线观看免费观看电影高清| 久久福利资源站| 亚洲激情在线视频| 国产精品久久久久久久久久久久久久 | 亚洲精品日韩在线观看| 欧美日韩国产综合视频在线观看| 亚洲午夜一级| 欧美成人综合| 一区二区欧美在线观看| 亚洲欧美激情视频| 国产日韩欧美一区二区三区在线观看| 亚洲一区二区三区在线| 欧美在线中文字幕| 亚洲人成网站在线播| 国产精品播放| 美女黄毛**国产精品啪啪| 日韩视频在线永久播放| 久久久高清一区二区三区| 亚洲欧洲一区二区三区在线观看| 欧美日韩精品一区| 亚洲欧美国产日韩中文字幕| 亚洲电影免费| 久久免费视频网站| 一区二区冒白浆视频| 韩国三级电影久久久久久| 欧美另类99xxxxx| 久久久精品久久久久| 亚洲精品视频免费| 久久综合色婷婷| 香蕉成人伊视频在线观看| 91久久国产综合久久蜜月精品 | 国产亚洲人成a一在线v站|