TC中開啟檔案和寫入檔案
1.從鍵盤輸入一行字元,寫入一個檔案,再把該檔案內容讀出顯示在螢幕上。 #include<stdio.h> main() { FILE *fp; char ch; if((fp=fopen("d:\\ string","w+"))==NULL) { printf("Cannot open file strike any key exit!"); getch(); exit(1); } printf("input a string:\n"); ch=getchar(); while (ch!='\n') { fputc(ch,fp); ch=getchar(); } rewind(fp); ch=fgetc(fp); while(ch!=EOF) { putchar(ch); ch=fgetc(fp); } printf("\n"); fclose(fp); } 2.把命令列引數中的前一個檔名標識的檔案,複製到後一個檔名標識的檔案中, 如命令列中只有一個檔名則把該檔案寫到標準輸出檔案(顯示器)中。 #include<stdio.h> main(int argc,char *argv[]) { FILE *fp1,*fp2; char ch; if(argc==1) { printf("have not enter file name strike any key exit"); getch(); exit(0); } if((fp1=fopen(argv[1],"r+"))==NULL) { printf("Cannot open %s\n",argv[1]); getch(); exit(1); } if(argc==2) fp2=stdout; else if((fp2=fopen(argv[2],"w+"))==NULL) { printf("Cannot open %s\n",argv[1]); getch(); exit(1); } while((ch=fgetc(fp1))!=EOF) fputc(ch,fp2); fclose(fp1); fclose(fp2); } 這兩個程式執行一下試一試.
#include <stdio.h>
ANSI C規定了標準輸入輸出函式庫,可用fopen()函式來實現開啟檔案,fclose()關閉指定的檔案。函式原型為:
FILE* fopen(char* filepathname, char* mode);
int fclose(FILE* fp);
關於檔案的字尾名支援樓上
"檔案"是指儲存在計算機外部儲存器中的資料的集合。計算機根據檔案的名字,完成對檔案的操作。
C語言將檔案看作是字元構成的序列,即字元流。其基本的儲存單位是位元組。
C語言中的檔案,按照它的ASC程式碼存放,稱為ASC檔案或文字檔案。按照資料值的二進位制程式碼存放,稱為二進位制檔案。
C語言在stdio.h中定義了一個file檔案結構體型別,包含管理和控制檔案所需要的各種資訊。
在c程式中系統對檔案進行的各種操作是通過指向檔案結構體的指標變數來實現的。
定義一個指向檔案結構體型別的指標變數的形式:
FILE * 指標變數名;
例如:FILE *fp1,*fp2;
則fp1,fp2是可以指向2個FILE檔案結構體的指標變數。檔案指標變數的賦值操作是由開啟檔案函式fopen()實現的。
fopen()函式的原型是:
FILE *fopen(char *filename,char *mode);
其中filename 是要開啟的檔名,mode是說明處理檔案的方式。它的呼叫方式一般為:
檔案指標變數=fopen(檔名,處理檔案方式);
例如:fopen("a:\\exam1.c","r")
注意:檔名是要開啟的檔案的檔名字,可以是包含碟符、路徑、檔名、副檔名的檔案識別符號。但在書寫時要符合c語言的規定。例如檔名“a:\tc\w1.c”,在該函式中的檔名應寫成“a:\\tc\\w1.c”。
如果是二進位制檔案,在使用時值要在模式後新增字元b即可,如“rb”\"rb+"分別表示讀取二進位制檔案和一讀取/寫入開啟二進位制檔案。
由於檔案不存在等原因造成不能開啟檔案,則呼叫fopen()後將返回一個空指標null.
if(fp=fopen("a:\\exam1.c","r")==NULL)
{
printf("Bu neng da kai wen jian \n");
gets();
exit(1);
}
一般exit(0)表示程式正常退出,exit(非零值)表示程式出錯後退出。
檔案的關閉
當c語言檔案使用完後,應該立即關閉檔案,防止由於誤操作等原因破壞已經開啟的檔案。檔案的關閉通過stdio.h中的fclose()函式實現。具體用法是:
fclose(檔案指標);
例如:fclose(fp);
則程式將檔案型別指標fp所指向的檔案關閉。fp不再指向該檔案。
1。fputc()函式
函式fputc()的作用是向檔案寫入一個字元。其呼叫形式為:
fputc(字元,檔案型指標變數)
例:fputc('A',fp);
fp為一個檔案型別指標變數,上式將字元常量‘A’(也可以是字元型變數)寫入檔案當前位置,並且使檔案位置指標下移一個位元組。如果寫入操作成功,返回值是該字元,否則返回EOF.
通過鍵盤輸入字元到檔案中,直到輸入“*”結束。
#include "stdio.h"
main()
{
FILE *fp;
char f_name[30];
char choise,in_char;
printf("\n\tPlease input the file name\n");
scanf("%s",f_name);
fp=fopen(f_name,"w+");
printf("\nPlease input :\n");
in_char=getchar();
while(in_char!='*')
{
fputc(in_char,fp);
in_char=getchar();
}
fclose(fp);
}
從檔案中讀取一個字元
函式fgetc()的作用是從一個檔案中讀取一個字元。其呼叫形式為:
fgetc(檔案型指標變數)
例:a=fgetc(fp);
fp為一個檔案型別的指標變數,函式fgetc(fp)不僅返回檔案當前位置的字元,並且使檔案位置指標下移一個字元。如果遇到檔案結束,則返回值為檔案結束標誌EOF。
輸入檔名,輸出該檔案的內容。
#include <stdio.h>
void main()
{
FILE *fp;
char out_ch,f_name[30];
printf("Please input the filename\n");
scanf("%s",f_name);
fp=fopen(f_name,"r");
if(fp!=NULL)
{
printf("The file is:\n");
while((out_ch=fgetc(fp))!=EOF)
{
putchar(out_ch);
}
}
else
{
printf("\n\n\t\t%s The file not find!\n",f_name);
}
fclose(fp);
}
按字串讀寫的函式
函式fputs()的作用是向檔案寫入一個字串。其呼叫形式為:
fputs(字串,檔案型指標變數)
其中字串可以是字串常量、指向字串的指標變數、存放字串陣列的陣列名。寫入檔案成功,函式返回值為0,否則為EOF。
注意:字串的結束標誌‘\0’ 不寫入。例如:
fputs("Hello",fp);
fp為一個檔案型指標變數,上式將字串中的字元h,e,l,l,o寫入檔案指標的當前位置。
fgets函式
函式fgets()的作用是從一個檔案中讀取一個字串。其呼叫形式為:
fgets(字元陣列,字元數,檔案型指標變數)
例:fgets(str,n,fp);
其作用是從fp指向的檔案的當前位置開始讀取n-1個字元,並加上字串結束標誌‘\0’一起放入字元陣列str中。如果從檔案讀取字元時遇到換行符或檔案結束標誌EOF,讀取結束。函式返回值為字元陣列str的首地址。
將檔案tsu.txt 複製到tsu1.txt中
#include "stdio.h"
main()
{
FILE *f_in,*f_out;
char str[50];
f_out=fopen("tsu.txt","r");
f_in=fopen("tsu1.txt","w");
while(!feof(f_out))
{
fgets(str,30,f_out);
fputs(str,f_in);
}
fclose(f_out);
fclose(f_in);
printf("The file copy finish!");
}
fprintf()函式
函式fprintf()的作用與printf()相似,只是輸出物件不是標準輸出裝置而是檔案,即按照格式要求將資料寫入檔案。它呼叫的一般形式為:
fprintf(檔案型指標變數,格式控制,輸出列表)
例如:
fprintf(fp,"%d,%s,%5.1f",num,name,score);
它的作用是將變數num,name,score按照%d,%s,%5.1f的格式寫入fp指向的檔案當前
位置
fscanf()函式是按照格式要求從檔案中讀取資料。它呼叫的一般形式為:
fscanf(檔案型指標變數,格式控制,輸入表列);
例如:
fscanf(fp,"%ld,%s,%5.1f",&num,name,&score);
它的作用是從fp指向的檔案的當前位置開始,按照的格式取出資料,賦給變數num,name,score.
。主要用於資料檔案的讀寫,即可以使用asc檔案也可以使用二進位制檔案。
將10個學生紀錄輸入檔案tsu.txt中,並顯示在螢幕上。
#include "stdio.h"
main()
{
FILE *fp;
long num;
int n,score;
char name[20];
fp=fopen("tsu.txt","w");
printf("Please input :\n");
for(n=1;n<=10;n++)
{
scanf("%s%10ld%d",name,&num,&score);
fprintf(fp,"%20s%10ld%5d\n",name,num,score);
}
fclose(fp);
fp=fopen("tsu.txt","r");
for(n=1;n<=10;n++)
{
fscanf(fp,"%20s%10ld%5d\n",name,&num,&score);
printf("%20s%10ld%5d\n",name,num,score);
}
fclose(fp);
}
fwrite()函式
作用是將成批的資料塊寫入檔案。
fwrite(寫入檔案的資料塊的存放地址,一個資料塊的位元組數,資料塊的個數,檔案型指標變數);
如果函式fwrite()操作成功,則返回值為實際寫入檔案的資料塊的個數。
例如:已知struct student型別的陣列stu[20],則語句
則fwrite(&stu[1],sizeof(struct student),2,fp);
從結構體陣列元素str[1]存放的地址開始,以一個結構體struct student型別變數所佔位元組數為一個資料塊,共寫入檔案型別指標fp指向的檔案2個資料塊,即stu[1]\stu[2]的內容寫入檔案。如果操作成功,函式的返回值為2。
fread()函式
作用是從檔案中讀出成批的資料塊。
fread(從檔案讀取得資料塊的存放地址,一個資料塊的位元組數,資料塊的個數,檔案型指標變數);
如果函式fread()操作成功,則返回值為實際從檔案中讀取資料塊的個數。
例如已知stu1是一個結構體struct student變數,則
fread(&stu1,sizeof(struct student),1,fp);
從檔案型別指標fp指向的檔案的當前位置開始,讀取1個資料塊,該資料塊為結構體struct student型別變數所佔位元組數,然後將讀取得內容放入變數stu1中。
注意:fwrite()和fread()函式讀寫檔案時,只有使用二進位制方式,才可以讀寫任何型別的資料。最常用於讀寫陣列和結構體型別資料。
函式feof()
用來檢測一個指向檔案的指標是否已經指到了檔案最後的結束標誌eof。
呼叫的一般形式為:
feof(檔案型指標變數);
如果檔案型指標指向的檔案的當前位置為結束標誌eof,則函式返回一個非零值,否則返回0值。
函式rewind()將令指向檔案的指標重新指向檔案的開始位置。函式無返回值。其呼叫形式為:
rewind(檔案型指標變數);
例如:
rewind(fp);
fp是一個指向檔案的指標,執行該語句後,fp指向檔案的開始位置,即檔案的第一個資料。
函式fseek()可以將使得指向檔案的指標變數指向檔案的任何一個位置,實現隨即讀寫檔案。它呼叫的形式為:
fseek(檔案型指標變數,偏移量,起始位置);
函式fseek()將以檔案的起始位置為基準,根據偏移量往前或往後移動指標。其中偏移量是一個長整型數,表示從起始位置移動的位元組數,正數表示指標往後移,負數表示指標往前移。起始位置用0、1、2或者用名字seek_set\seek_cur\seek_end代表檔案開始、檔案當前位置和檔案結束位置。如果指標設定成功,返回值為0,否則為非0值。
函式ftell()用於測試指向檔案的指標的當前位置。它的呼叫方式為:
ftell(檔案型指標變數);
函式的返回值是一個長整形數,如果測試成功,則返回指向檔案的指標當前指向的位置距離檔案開頭的位元組數,否則返回-1L
作業:
1、將鍵盤輸入的10個浮點數儲存到一個二進位制檔案中,然後在檔案末尾再追加若干資料,最後統計檔案中資料的個數。
2、已知2個檔案data1和data2,將他們的內容和並起來,生成第3個檔案data3.
3、已知一個由西文字元組成的ask檔案,要求將檔案中的英文字母按照如下形勢變換,然後生成一個新的密碼檔案。a<=>z b<=>y c<=>x.......
4、已知一個檔案包含若干人的姓名、通訊地址、郵政編碼和電話,要求根據此檔案生成一個只包含所有人姓名和電話的新檔案。
相關文章
- JAVA語言的開啟檔案和寫入檔案Java
- Linux-檔案寫入和檔案同步Linux
- matlab開啟和生成使用.p檔案和exe檔案Matlab
- PHP寫入檔案PHP
- #用openfiledialog檔案和savefileDialog開啟和儲存檔案
- 讀取檔案流並寫入檔案流
- csv檔案的寫入和讀取
- 在blender中開啟pmx檔案
- golang寫入檔案時,覆蓋前檔案(將前檔案清空)Golang
- 不能開啟要寫入的檔案故障解決辦法
- Android開發中拷貝db檔案寫入SQLiteAndroidSQLite
- ipynb檔案用什麼開啟 ipynb檔案怎麼開啟
- DBF檔案怎麼開啟?DBF檔案的開啟方法教程
- python檔案建立、讀取和寫入Python
- 如何讀取和寫入JSON檔案JSON
- Python之檔案讀取和寫入Python
- IO流-檔案的寫入和讀取
- 【MATLAB】讀取和寫入文字檔案Matlab
- C#讀取文字檔案和寫文字檔案C#
- 無法寫入檔案 Filesystem
- Java 例項 - 檔案寫入Java
- 圖片寫入pdf檔案
- 追加寫入json檔案JSON
- python 寫入CSV檔案Python
- html檔案怎麼開啟(手機html檔案怎麼開啟)HTML
- 開啟壓縮檔案提示不能開啟此檔案怎麼辦
- 檔案描述符、開啟檔案表以及inode
- 說說在 Python 中,如何寫入檔案Python
- 檔案開啟的格式
- 開啟.ziw格式檔案
- PHP之開啟檔案PHP
- 開啟檔案數限制
- java開啟PPT檔案Java
- 檔案排版(文字檔案讀寫)
- Javascript寫入txt和讀取txt檔案示例JavaScript
- CHM檔案打不開,提示"不能開啟檔案:mk@.....
- Win10系統中djvu檔案如何開啟_win10開啟djvu檔案的方法Win10
- mpp檔案用什麼軟體開啟 如何開啟mpp格式檔案