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

来源:https://www.cnblogs.com/Yuuki-/archive/2019/03/28/10617847.html
-Advertisement-
Play Games

複習:#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

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 題意 "題目鏈接" Sol 我們可以把圖行列拆開,同時對於行/列拆成很多個聯通塊,然後考慮每個點所在的行聯通塊/列聯通塊的貢獻。 可以這樣建邊 從S向每個行聯通塊連聯通塊大小條邊,每條邊的容量為1,費用為$i$(i表示這是第幾條邊)。 從每個點所在的行聯通塊向列聯通塊連邊,容量為1,費用為0 從每個 ...
  • 想要熟練使用PyQt,還是需要深入研究下這個庫的使用,筆者這裡只是拋磚引玉。 關註公眾號「**Python專欄**」,後臺回覆:**zsxq06**,獲取本文全套代碼。 ...
  • python讀取大文件 1. 較pythonic的方法,使用with結構 文件可以自動關閉 異常可以在with塊內處理 <! more 最大的優點 :對可迭代對象 f,進行迭代遍歷:for line in f,會自動地使用緩衝IO(buffered IO)以及記憶體管理,而不必擔心任何大文件的問題。 ...
  • 一、簡要說明 開篇說明 其實吧這是我人生中寫的第一篇博客,我也不知道怎麼排版和編輯讓博文顯示的更加美觀,現在正在學Markdown編輯語法,也是剛剛學編程的一個小菜鳥,目前是大二的在校生,我的初衷是把我平時所學的知識都像做筆記一樣寫下來,讓以後在學習更多知識的時候回來一看,舊的知識就可以鞏固回來了, ...
  • ArrayList ArrayList 是通過一個數組來實現的,因此它是在連續的存儲位置存放對象的引用,只不過它比 Array 更智能,能夠根據集合長度進行自動擴容。 假設讓我們來實現一個簡單的能夠自動擴容的數組,我們最容易想到的點就是: 實際上,ArrayList的內部實現原理也是這樣子,我們可以 ...
  • 開發世界現在有很多反設計模式的開發方式,比如使用可執行代碼文件作為配置文件。 ...
  • 一、引言 雖然springboot幫我們進行了自動配置,但配置還是不可避免的,比如最簡單的埠號,資料庫連接。但springboot的配置一般不用xml進行配置,而是yml和properties,選擇他們當然是因為他們更方便。 YAML(YAML Ain't Markup Language)是以數據 ...
  • 超詳細官方教程解析 https://blog.csdn.net/fly_yr/article/details/51540269 實戰過程: 【1】創建Scrapy項目 scrapy startproject TestDemo 若進入到相應的文件目錄下,在地址欄輸入cmd進入命令行界面,輸入以上命令, ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...