C++學習(二十八)(C語言部分)之 文件操做

複習:
#define 定義一個宏
#include 文件包含
#if 條件
防止頭文件重複包含
定義一個宏 判斷宏是否認義 判斷頭文件是否包含
#define _STDIO_H_
#include<stdio.h>
#pragma once 防止頭文件重複包含 房子頭文件的最前面
多文件 .h+*.cpp
函數聲明放在 .h 函數定義放在同名的 .cpp中 cpp包含.h文件
用的時候包含.h 就能夠用裏面的函數node


文件操做
保存在內存中地數據 無論程序結果 電腦關機 內存都會回收 數據不在了
須要保存數據---->文件操做
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:57spa

相關文章
相關標籤/搜索