複習:#define 定義一個巨集#include 文件包含#if 條件防止頭文件重覆包含定義一個巨集 判斷巨集是否定義 判斷頭文件是否包含#define _STDIO_H_#include<stdio.h>#pragma once 防止頭文件重覆包含 房子頭文件的最前面多文件 .h+*.cpp函數聲明放 ...
複習:
#define 定義一個巨集
#include 文件包含
#if 條件
防止頭文件重覆包含
定義一個巨集 判斷巨集是否定義 判斷頭文件是否包含
#define _STDIO_H_
#include<stdio.h>
#pragma once 防止頭文件重覆包含 房子頭文件的最前面
多文件 .h+*.cpp
函數聲明放在 .h 函數定義放在同名的 .cpp中 cpp包含.h文件
用的時候包含.h 就可以用裡面的函數
文件操作
保存在記憶體中地數據 不管程式結果 電腦關機 記憶體都會回收 數據不在了
需要保存數據---->文件操作
1.文件尾碼 .txt .cpp .h .avi 取決於怎麼打開這種文件 但裡面的內容和格式(尾碼)無關
fp = fopen("2.txt", "w"); //第一個參數 文件路徑 第二個參數 打開方式
//r 用只讀的方式打開文件 文件存在 打開成功 不存在 打開失敗 fpNULL
//w 用只寫的方式打開文件 文件存在 就把文件清空 文件不存在就創建一個新文件
//a 用追加的方式打開文件 文件存在將內容追加到文件末尾 文件不存在就新建一個文件
//文件 1.文本文件 2.二進位文件
//不管什麼文件都可以用txt方式打開
//文本文件是給人看的 一般來說不會有亂碼
//二進位文件 給電腦看的 一般不是給人看的(看不懂)(大部分是二進位文件 視頻 音樂)
//t 文本文件 rt 用只讀防止打開文件 (預設)
//b 二進位文件 rb 用只讀方式打開二進位文件
//+ 表示可讀寫文件 文件可以讀也可以寫
//wb+ 用只寫的方式打開一個可讀寫的二進位文件
//wb+ ---->wb 只能讀 wb+ 文件可讀可寫
//文件尾碼可以隨意寫 不影響內容
//修改文件 讀出來 記憶體中修改完成--->寫回去
//rb 用只讀的方式打開二進位文件 rw不存在
測試代碼筆記如下:
1 #include<stdio.h> 2 3 int main() 4 { 5 FILE *fp;//fp file pointer 文件指針 6 if (fp == NULL) 7 { 8 printf("文件不存在:"); return 0;//直接退出 9 } 10 else 11 { 12 printf("文件打開"); 13 } 14 ///文件已經打開 寫入數據 /讀取數據 15 16 //寫入數據 17 char arr[] = "你好世界"; 18 //char arr[]="12345678"; 19 #if 0 20 for (int i = 0; arr[i] != '\0'; ++i) 21 { 22 fputc(arr[i], fp); 23 } 24 fputc(0, fp);//寫入一個字元到文件 char 一個位元組的整型 25 #elif 1 26 fputs(arr, fp);//將字元串寫入文件 寫字元串的時候不會寫入\0 27 //fputc('\0', fp); 28 //fputs(arr, fp);//將字元串寫入文件 29 #else 30 #endif 31 32 fclose(fp);//關閉文件 (保存內容) 33 //remove 刪除文件(用路徑) 34 getchar(); 35 return 0; 36 } 37 38 //字元操作 fgetc fputc 39 //字元串 fgets fputs 40 //格式化寫入寫出 41 //fprintf fscanf 42 //printf("格式占位字元串%d",132) 43 //fprintf(fp,"格式占位字元串%d",123);//將內容寫入文件 44 //fscanf 從文件中讀取數據 45 //scanf("%d",&x); 46 //fscanf(fp,"%d",&x);//從文件中讀取一個數據 賦值給x 47 48 49 //1.知道怎麼寫入的 就怎麼讀出來 50 51 //char arr[100]="5";// 52 53 54 //二進位文件讀寫方式 55 //結構體 用結構體大小作為單位讀寫 56 //使用位元組作為單位(可能會亂碼) 57 //可以用於任何類型的數據 58 //fread 讀取 文件內容 59 //fwrite 寫入文件
1 #include<stdio.h> 2 struct node 3 { 4 int x, y; 5 double z; 6 }; 7 int main() 8 { 9 FILE*fp = fopen("1.txt", "r"); 10 if (fp == NULL) return; 11 #if 0 12 for (int i = 0; i < 10; ++i) 13 { 14 printf("%c", fgetc(fp));//文件讀取 15 } 16 #elif 1 17 char arr[100];//數組 稍大一點 18 fgets(arr,100,fp);//讀取文件內容 將文件中的內容 讀取到記憶體中/用文件中的內容給變數賦值 19 //第一個參數 數組名 第二個參數 數組大小 第三個 文件指針 20 // 實際上最多讀取99個字元 +自動加的\0 21 //遇到文件末尾 或者遇到換行 提前結束讀取 22 //遇到\0會提前結束 遇到空格不會提前結束 23 puts(arr);//列印字元串 24 #else 25 #endif 26 /* 27 關於文件讀寫 全部通過文件指針操作 28 文件內部指針說法 指向正在讀/正在在寫的位置 29 r 每次r打開 文件內部指針指向文件開頭 30 w 也是指向文件開頭 31 a 指向文件末尾 32 33 文件寫的時候 文件指向文件末尾 如果這個時候要讀寫 會出錯 34 文件 末尾 EOF -1 35 36 */ 37 fclose(fp); 38 39 /**************文件2*********************/ 40 //FILE *fp2 = fopen("2.txt", "wb"); 41 //struct node brr[2] = { { 1, 23, 3.14 }, { 3, 4, 7.89 } }; 42 //fwrite(brr, sizeof(struct node), 2, fp2);//寫入 43 //fclose(fp2); 44 45 //讀取文件 46 FILE *fp2 = fopen("2.txt", "rb"); 47 //struct node brr[2] ; 48 //fread(brr, sizeof(struct node), 2, fp2);//讀取 49 fseek(fp, 0, SEEK_END);//直接移動文件指針到達文件末尾 50 long offset = ftell(fp);//得到當前偏移量 51 printf("文件大小%ld", offset); 52 53 //fseek 通過偏移量移動文件指針 54 //中間的是偏移量 55 //後面 SEEK_SET 文件開頭 56 //SEEK_CUR //文件指針的當前位置 57 //SEEK_END //文件末尾 58 59 //fseek移動文件指針的位置 是base+offset 60 61 fclose(fp2); 62 getchar(); 63 return 0; 64 }
附:
2019-03-28 21:30:57