C語言之標準檔案操作
主要介紹一下C語言檔案操作的api。
檔案指標與檔案開關
FILE * p;檔案指標,可以直接操作檔案中的內容。
fopen(dir,type);開啟一個檔案,返回檔案指標,指向檔案中的第一個位置。
fclose(p);關閉檔案
p = NULL;使用完,注意將檔案指標賦值為NULL,不讓其成為野指標。
int main(){
FILE * p;
p = fopen("d://a.txt","r");
if(p == NULL){
printf("檔案開啟失敗\n");
exit(-1);
}
fclose(p);
p = NULL;
return 0;
}
檔案開啟型別
檔案開啟型別有多種,最常用的幾種有
r,只讀的方式開啟一個文字檔案,不存在則開啟失敗
w,只寫的方式開啟一個檔案,不存在則建立
a,追加的方式開啟一個檔案,不存在則建立
r+,讀寫的方式,不存在則開啟失敗
w+,讀寫方式開啟或者新建一個檔案,允許讀寫。
a+,讀寫方式開啟文字檔案,在文字末尾追加資料,不存在則建立一個。
ab,追加的方式開啟一個二進位制檔案,不存在則開啟失敗。
rb,讀的方式開啟一個二進位制檔案,不存在則開啟失敗。
wb,寫的方式開啟一個二進位制檔案,不存在則建立。
上面有的多,但是事實上,卻很好記憶,你只要認識3個單詞,read,write,append即可
常用操作檔案的函式
fgetc(p) != EOF;讀取一個字元,這裡的EOF事實上就是常量-1
int main(){
FILE * p;
if((p = fopen("d://a.txt","r")) == NULL){
printf("檔案開啟失敗\n");
};
char c[100];
int i = 0;
while((c[i] = fgetc(p)) != EOF){
i++;
}
c[i] = '\0';
printf("%s",c);
fclose(p);
p = NULL;
return 0;
}
fputc(c,p);寫出一個字元,c為字元,p為檔案指標。
char s[] = "qwe";
int length = strlen(s);
int index = 0;
while(index < length){
fputc(s[index ++],p);//p為檔案指標
}
ftell(p);獲取當前檔案的指標的位置
fseek(p,0L,SEEK_END);設定當前檔案指標的位置,這裡有三個引數,第一個引數是檔案指標,第二個引數是便宜量,第三個引數是,設定的位置
通常的,我們通過檔案指標來獲取到檔案的體積
int curIndex = ftell(p);
fseek(p,0L,SEEK_END);
int lastIndex = ftell(p);
int length = lastIndex - curIndex;
feek(p,curIndex,SEET_SET); //將檔案指標設定回原位置
fwrite(&node,sizeof(Node),1,p);
這裡4個引數,第一個引數,將存放哪個結構體,第二個引數是結構體的大小,第三個引數是準備存放幾個結構體,p是檔案指標。寫入成功返回1。
fread(&node,sizeof(Node),1,p);第一個引數是準備存放到哪個結構體,其他引數跟fwrite的意義是一樣的。這個函式讀取成功返回1。
typedef struct Student {
int age;
char * name;
int c;
int d;
}Student;
void writeTest() {
Student s;
s.age = 1;
s.c = 1;
s.d = 1;
s.name = (char *)malloc(10);
strcpy(s.name, "abcde");
FILE * f;
if ((f = fopen("D://a.dat", "wb")) == NULL) {
printf("程式開啟失敗\n");
exit(-1);
}
fwrite(&s, sizeof(s), 1, f);
fwrite(s.name, 10, 1, f);
fclose(f);
f = NULL;
free(s.name);
}
void readTest() {
Student s;
FILE * p;
if ((p = fopen("D://a.dat", "rb")) == NULL) {
printf("程式開啟失敗\n");
exit(-1);
}
fread(&s, sizeof(s), 1, p);
s.name = (char *)malloc(10);
fread(s.name, 10, 1, p);
printf("%s", s.name);
free(s.name);
fclose(p);
p = NULL;
}
fputs(str,f);//兩個引數,第一個引數是將要存的字串的指標,第二個引數是檔案指標,直接輸出str中的所有字串,輸出完成之後不會輸出換行符。注意這裡與puts的區別。
void fputsTest() {
FILE * f;
if ((f = fopen("d://a.txt", "w")) == NULL) {
printf("檔案開啟失敗\n");
exit(1);
}
const char * str = "hello word";
const char * str2 = "abc";
fputs(str, f);
fputs(str2, f);
fclose(f);
f =`
NULL;
}
fgets(str,length + 1,f);這裡三個引數,第一個引數是存放到哪個字串,第二個引數是讀取幾個位元組,注意這裡要寫成讀取的位元組數+1,原因是最後加一個’\0’,第三個引數是檔案指標。同時應該注意到的一點是,漢子是佔2個位元組佔2個位元組。
void fgetsTest() {
FILE * f;
if ((f = fopen("d://a.txt","r")) == NULL) {
puts("檔案開啟失敗");
exit(1);
}
char s[200];
fgets(s, 5,f);
puts(s);
fclose(f);
f = NULL;
}
重點掌握,fgetc,fputc,fread,fwrite;4個函式
相關文章
- Dart 語言標準流與檔案操作Dart
- c語言之解釋複雜指標C語言指標
- C語言 - 標頭檔案包含C語言
- C++標準庫名字和標頭檔案--表C++
- 標準C語言1C語言
- 標準C語言2C語言
- 標準C語言4C語言
- 標準C語言5C語言
- 標準c語言03C語言
- C++ 字串 cctype 標頭檔案標準庫處理函式C++字串函式
- C檔案與檔案的操作
- C# 檔案操作C#
- C語言關於標頭檔案的使用C語言
- c/c++ 標準容器 forward_list resize 操作C++Forward
- C語言之基本概念C語言
- C語言之詭異字串C語言字串
- C語言之氣泡排序C語言排序
- C語言之結構體C語言結構體
- C 語言標頭檔案作用的簡單理解
- C語言標頭檔案到底是什麼?C語言
- C++寫檔案操作C++
- C語言之環形佇列C語言佇列
- C語言之static關鍵字C語言
- C語言之輸入輸出C語言
- C 語言專案中標頭檔案包含的最佳實踐
- python常用標準庫(os系統模組、shutil檔案操作模組)Python
- C語言標頭檔案組織與包含原則C語言
- C語言中的標頭檔案中的巨集定義C語言
- C++標準庫中檔案流類的繼承關係C++繼承
- C++檔案讀寫操作C++
- c++ IO類,檔案操作C++
- C++中的檔案操作C++
- C++讀寫檔案操作C++
- C語言之位段使用詳解C語言
- C語言之字串處理函式C語言字串函式
- C/C++標頭檔案一覽C++
- c 語言指標操作經典問題指標
- 要點4:C的檔案操作