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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...