c語言:文件操作(1)

前言:為什么要使用文件

使用文件可以讓程序在不同運行之間保存和讀取數據。這樣可以實現持久化存儲,即使程序關閉后數據也不會丟失。文件也可以用于數據交換,允許不同程序之間共享信息。在 C 語言中,文件還可以用于讀取配置信息,日志記錄等。當你玩電腦游戲時,游戲通常會讓你保存進度。這就好比把游戲狀態保存到一個文件中,這樣你可以在之后重新加載游戲而不會丟失進度。另外,想象一下你在做一份報告,你可以把報告內容保存到文件中,這樣即使你關掉電腦,文件中的內容也會被保存下來,以便你之后再次打開并繼續編輯。文件就像是一個存儲盒,可以把數據放進去,然后在需要的時候再取出來使用。總的來說,文件在編程中是非常重要的,可以幫助程序處理數據和信息。


文件的定義

文件是計算機存儲數據的一種方式,可以存儲文本、圖像、音頻、視頻等各種類型的信息。在計算機中,文件通常被組織成一個由字節組成的序列,每個文件都有一個唯一的名稱用于標識。文件可以存儲在計算機的硬盤、固態硬盤、光盤、U盤等存儲介質上。


分類:

從文件功能的角度分為兩類:程序文件,數據文件。

程序文件:

程序文件是計算機中用來存儲軟件程序代碼的文件。程序文件可以包含各種編程語言編寫的指令和數據,用于告訴計算機如何執行特定的任務或操作。

程序文件通常也具有特定的文件擴展名或后綴,以便操作系統和用戶能夠識別它們并正確地處理。這些后綴通常指示了程序文件的類型或格式。例如:

  • 可執行程序文件通常以.exe、.app、.bat等結尾。
  • 腳本文件通常以.sh、.py、.js等結尾。
  • 動態鏈接庫文件通常以.dll、.so等結尾。
  • Java程序文件通常以.jar、.class等結尾。
  • HTML網頁文件通常以.html、.htm結尾。

數據文件:

數據文件是計算機中用來存儲各種類型數據的文件。這些數據可以是文本、圖像、音頻、視頻、數據庫記錄等。數據文件通常以特定的格式存儲,以便計算機能夠正確地讀取和解釋其中的信息。這些文件可以通過各種應用程序進行創建、編輯和訪問,以便用戶能夠查看、修改和管理其中的數據。

數據文件通常具有特定的文件擴展名或后綴,以便操作系統和應用程序能夠識別它們并正確地處理。這些后綴通常指示了數據文件的類型或格式。例如:

  • 文本文件通常以.txt、.doc、.pdf等結尾。
  • 圖像文件通常以.jpg、.png、.gif等結尾。
  • 音頻文件通常以.mp3、.wav、.flac等結尾。
  • 視頻文件通常以.mp4、.avi、.mov等結尾。
  • 數據庫文件通常以.db、.mdb、.sql等結尾。

    文件名

一個文件要有一個唯一的文件標識,以便用戶識別和引用。
文件名包含3部分:文件路徑+文件名主干+文件后綴。
例如:

假設你有一個名為"mydocument.docx"的文件,它存儲在Windows操作系統的C盤的Documents文件夾中。在這種情況下,文件名的各部分如下:

  • 文件路徑:C:\Documents\
  • 文件名主干:mydocument
  • 文件后綴:.docx
C:\Documents\mydocument.docx

二進制文件和文本文件

根據數據的組織形式,數據文件被稱為文本文件或者二進制文件。

二進制文件:數組在內存中以二進制的形式存儲,不加轉換的輸出到外存。

文本文件:以ASCLL字符的形式存儲的文件。

17acc0db3ae34e32934b5b1cfe2cf801.webp

示例:

#include<stdio.h>
int main()
{// 定義一個整型變量a,賦值為10000int a = 10000;// 打開一個名為test.txt的文件,以二進制寫入模式打開FILE* pf = fopen("test.txt", "wb");// 將變量a的內容以二進制形式寫入到文件中fwrite(&a, 4, 1, pf);// 關閉文件fclose(pf);// 將文件指針置為空pf = NULL;// 返回0,表示程序正常結束return 0;
}

?這段代碼的功能是將整數變量a的值10000以二進制形式寫入到名為test.txt的文件中。具體來說,它通過fopen函數以二進制寫入模式打開文件,然后使用fwrite函數將整數a的二進制表示寫入到文件中,最后使用fclose關閉文件。

效果演示:

1.運行完程序后,返回解決方案資源管理器。

找到源文件,添加,現有項

bfa98cd8a5fe4551bea93fa3fb5af4d6.png

2.點開, 找到test文件,雙擊test文件。

692e3b2433274dc9848e77b9db266107.png

3,回到解決方案中,?此時,已經出現了test.txt文件,右鍵此文件,找到打開方式,選擇二進制編譯器,確定

bd4ac9dc84cd490f8be3c1cc1ed0a3d7.png

4.得到結果,觀察二進制文件。

efee68c14076460eb548787dd5ef10e1.png?

?流和標準流

在C語言中,流(stream)是一個用于輸入和輸出的抽象概念。它提供了一種統一的方式來處理不同類型的輸入和輸出,包括文件、鍵盤、屏幕和其他設備。

你可以把它想象成水流。就像水流可以從一個地方流向另一個地方一樣,流在計算機編程中也是用于數據的流動。

標準流

C語言中有三個標準流:

  1. 標準輸入流(stdin):?用于從鍵盤或其他輸入設備讀取數據。在C語言中,scanf函數就是從標準輸入流中讀取數據的一個例子。
  2. 標準輸出流(stdout):?用于向屏幕或其他輸出設備輸出數據。在C語言中,printf函數就是向標準輸出流輸出數據的一個例子。
  3. 標準錯誤流(stderr):?用于向屏幕或其他輸出設備輸出錯誤信息。在C語言中,fprintf函數可以向標準錯誤流輸出數據。

stdin、stdout、stderr三個流的類型是:FILE*,通常稱為文件指針。

C語言中,就是通過FILE*的文件指針來維護流的各種操作的。

文件指針

文件指針是C語言中用于處理文件的重要概念。它是一個指向FILE類型的指針,FILE類型是C語言標準庫中用于表示文件的結構體類型。

例如:VS2022編譯器環境下提供的stdio.h頭文件中,有以下的文件類型聲明:

typedef struct 
{int _Placeholder;
} fpos_t;typedef struct 
{unsigned int _Mode;
} _fmode_t;typedef struct 
{long long _Placeholder;
} fpos64_t;typedef struct _iobuf 
{char *_ptr;int _cnt;char *_base;int _flag;int _file;int _charbuf;int _bufsiz;char *_tmpfname;
} FILE;typedef struct _wfinddata_t 
{unsigned attrib;time_t time_create;time_t time_access;time_t time_write;_fsize_t size;wchar_t name[260];
} _wfinddata_t;typedef struct _wfinddatai64_t 
{unsigned attrib;__time64_t time_create;__time64_t time_access;__time64_t time_write;__int64 size;wchar_t name[260];
} _wfinddatai64_t;typedef struct _wfinddata32_t 
{unsigned attrib;time_t time_create;time_t time_access;time_t time_write;unsigned long size;wchar_t name[260];
} _wfinddata32_t;typedef struct _wfinddata32i64_t 
{unsigned attrib;__time64_t time_create;__time64_t time_access;__time64_t time_write;unsigned __int64 size;wchar_t name[260];
} _wfinddata32i64_t;

文件的關閉和打開:

打開文件

要使用文件指針,首先需要打開文件。可以使用fopen函數來打開文件,該函數會返回一個指向FILE類型的指針,表示打開的文件。fopen函數的原型如下:

FILE *fopen(const char *filename, const char *mode);

其中,filename是要打開的文件名,mode表示文件的打開模式,比如讀取、寫入、追加等。

?文件指針的位置

文件指針指示了文件中當前的位置,它可以在文件中移動,以便進行讀取或寫入操作。可以使用fseek函數來移動文件指針的位置:

int fseek(FILE *stream, long offset, int origin);

其中,stream是文件指針,offset是偏移量,origin表示起始位置,可以是SEEK_SET(文件開頭)、SEEK_CUR(當前位置)或SEEK_END(文件末尾)。?

讀寫文件?

一旦文件被打開,就可以使用文件指針進行讀取和寫入操作。比如,可以使用fscanffprintf函數進行格式化的輸入和輸出,或者使用freadfwrite函數進行二進制數據的讀寫操作。?

關閉文件

在文件操作完成后,應該使用fclose函數關閉文件,釋放文件資源:

int fclose(FILE *stream);

示例

下面是一個示例,演示了如何使用文件指針來打開文件、寫入數據并關閉文件:

#include <stdio.h>int main() 
{FILE *fp;fp = fopen("example.txt", "w");  // 以寫入模式打開文件if (fp != NULL) {fprintf(fp, "This is a file created using file pointers!");  // 寫入數據fclose(fp);  // 關閉文件}return 0;
}

8053b2c0ffae4bcbbb6ad05f299911e5.png?

下一章節,講文件的讀寫順序,等各種順序讀寫函數。

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/213746.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/213746.shtml
英文地址,請注明出處:http://en.pswp.cn/news/213746.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

系統架構設計師教程(三)信息系統基礎知識

信息系統基礎知識 3.1 信息系統概述3.1.1 信息系統的定義3.1.2 信息系統的發展3.1.3 信息系統的分類3.1.4 信息系統的生命周期3.1.5 信息系統建設原則3.1.6 信息系統開發方法 3.2 業務處理系統 (TPS)3.2.1 業務處理系統的概念3.2.2 業務處理系統的功能3.2.3 業務處理系統的特點…

Python:核心知識點整理大全13-筆記

目錄 6.4.3 在字典中存儲字典 6.5 小結 第7章 用戶輸入和while循環 7.1 函數 input()的工作原理 7.1.1 編寫清晰的程序 7.1.2 使用 int()來獲取數值輸入 7.1.3 求模運算符 7.1.4 在 Python 2.7 中獲取輸入 7.2 while 循環簡介 7.2.1 使用 while 循環 往期快速傳送門…

基于jsonrpc4j實現JSON-RPC over HTTP(客戶端多種調用方式)

1.說明 前文基于jsonrpc4j實現JSON-RPC over HTTP(服務端集成Spring Boot)&#xff0c; 介紹了JSON-RPC over HTTP服務端的實現方法&#xff0c; 并且通過Postman工具調用服務端對外提供的方法&#xff0c; 下面介紹兩種基于Java代碼調用客戶端的方法&#xff1a; 非Spring框…

什么是https 加密協議?

什么是https 加密協議&#xff1f; 加密通信的作用加密原理數字證書SSL/TLS 協議部署和使用重要性 HTTPS&#xff08;Hyper Text Transfer Protocol Secure&#xff09;是一種網絡傳輸協議&#xff0c;它是基于HTTP協議的擴展&#xff0c;通過加密通信內容來保障數據傳輸的安全…

SPI 通信-stm32入門

本節我們將繼續學習下一個通信協議 SPI&#xff0c;SPI 通信和我們剛學完的 I2C 通信差不多。兩個協議的設計目的都一樣&#xff0c;都是實現主控芯片和各種外掛芯片之間的數據交流&#xff0c;有了數據交流的能力&#xff0c;我們主控芯片就可以掛載并操縱各式各樣的外部芯片&…

gpu版本的GNN的demo

1、當涉及到在GPU上運行圖神經網絡&#xff08;GNN&#xff09;時&#xff0c;通常使用深度學習框架&#xff0c;如PyTorch或TensorFlow。在這里&#xff0c;我將為您提供一個使用PyTorch Geometric庫實現GNN的簡單示例。 首先&#xff0c;確保您已經安裝了PyTorch和PyTorch G…

第 375 場 LeetCode 周賽題解

A 統計已測試設備 模擬&#xff1a;記錄當前已測試設備數量 class Solution { public:int countTestedDevices(vector<int> &batteryPercentages) {int res 0;int s 0;for (auto x: batteryPercentages) {if (x - s > 0) {res;s;}}return res;} };B 雙模冪運算 …

【無線網絡技術】——無線城域網(學習筆記)

&#x1f4d6; 前言&#xff1a;無線城域網&#xff08;WMAN&#xff09;是指在地域上覆蓋城市及其郊區范圍的分布節點之間傳輸信息的本地分配無線網絡。能實現語音、數據、圖像、多媒體、IP等多業務的接入服務。其覆蓋范圍的典型值為3~5km&#xff0c;點到點鏈路的覆蓋可以高達…

少兒編程考級:激發孩子邏輯思維能力的關鍵

在當今信息化時代&#xff0c;少兒編程已經成為孩子們不可或缺的一項技能。而少兒編程考級&#xff0c;則是檢驗孩子們在這一技能上所取得的成就的重要途徑。少兒編程考級不僅能夠激發孩子們的邏輯思維能力&#xff0c;還能夠提高他們的動手能力和創造力。6547網將詳細介紹少兒…

電源模塊測試系統測試LED電源項目的優勢

LED電源測試是電源在設計、生產過程中的關鍵環節&#xff0c;也是確保LED照明產品可靠性和穩定性的重要步驟。LED電源測試一般包括電壓、電流、效率、穩定性等。電源模塊測試系統測試LED電源&#xff0c;實現自動化測試&#xff0c;保證測試結果的可靠性。 LED電源測試項目及方…

實現加鹽加密方法以及MappedByteBuffer,RandomAccess

目錄 自己實現 Spring Security MappedByteBuffer RandomAccess 加鹽加密的實現 自己實現 傳統MD5可通過彩虹表暴力破解&#xff0c; 加鹽加密算法是一種常用的密碼保護方法&#xff0c;它將一個隨機字符串&#xff08;鹽&#xff09;添加到原始密碼中&#xff0c;然后再進…

力扣17. 電話號碼的字母組合(java 回溯法)

Problem: 17. 電話號碼的字母組合 文章目錄 題目描述思路解題方法復雜度Code 題目描述 思路 題目給定一串數字&#xff0c;要求我們找出所有可能的字母組合&#xff0c;即我們可以窮舉出所有可能的結果&#xff0c;而涉及到窮舉我們自然可以想到利用回溯來解決問題&#xff0c…

xv6 中的一些系統調用(下)

〇、前言 本文將會結合源代碼談論 sleep、wakeup 這兩個系統調用。 一、sleep()系統調用 以下是sleep()函數源碼&#xff1a; // Atomically release lock and sleep on chan. // Reacquires lock when awakened. void sleep(void *chan, struct spinlock *lk) {struct pro…

無線且列窄圖片如何轉excel?

寫此文原因&#xff1a;圖片要轉excel&#xff0c;這放以前&#xff0c;是不能實現的功能&#xff0c;但隨著人工智能的蓬勃發展&#xff0c;人們已克服了這一難題&#xff0c;但是&#xff0c;我們知道&#xff0c;要將圖片識別成excel&#xff0c;識別程序首先要先識別圖片中…

如何在小米路由器4A千兆版刷入OpenWRT并通過內網穿透工具實現公網遠程訪問

文章目錄 前言1. 安裝Python和需要的庫2. 使用 OpenWRTInvasion 破解路由器3. 備份當前分區并刷入新的Breed4. 安裝cpolar內網穿透4.1 注冊賬號4.2 下載cpolar客戶端4.3 登錄cpolar web ui管理界面4.4 創建公網地址 5. 固定公網地址訪問 前言 OpenWRT是一個高度模塊化、高度自…

交易歷史記錄20231206 記錄

昨日回顧&#xff1a; select top 10000 * from dbo.CODEINFO A left join dbo.全部&#xff21;股20231206010101 B ON A.CODE B.代碼 left join dbo.全部&#xff21;股20231206CONF D on A.CODED.代碼left join dbo.全部&#xff21;股20231206 G on A.CODEG.代碼 left…

解決前端跨域問題,后端解決方法

Spring CloudVue前后端分離項目報錯&#xff1a;Network Error&#xff1b;net::ERR_FAILED&#xff08;請求跨越&#xff09;-CSDN博客記錄自用

Kafka-快速實戰

Kafka介紹 ChatGPT對于Apache Kafka的介紹&#xff1a; Apache Kafka是一個分布式流處理平臺&#xff0c;最初由LinkedIn開發并于2011年開源。它主要用于解決大規模數據的實時流式處理和數據管道問題。 Kafka是一個分布式的發布-訂閱消息系統&#xff0c;可以快速地處理高吞吐…

阿里云國際基于CentOS系統鏡像快速部署Apache服務

阿里云輕量應用服務器提供了Windows Server系統鏡像和主流的Linux系統鏡像&#xff0c;您可以通過該類鏡像創建純凈、安全、穩定的運行環境。本文以CentOS 7.6系統鏡像為例&#xff0c;介紹如何快速配置Apache服務。 背景信息 注意&#xff0c;阿里云國際通過corebyt注冊并充…

使用rawpy.imread讀取.RAW格式數據和.dng格式數據(附代碼)

.dng格式是一個更兼容、更高效的RAW格式。如果需要在不同軟件之間交換RAW文件&#xff0c;或者需要在軟件中進行大量編輯&#xff0c;那么.dng格式是一個不錯的選擇。 目錄 一、 .dng格式數據和.RAW格式數據二、 .dng格式數據和.RAW格式數據區別三、安裝rawpy包四、讀取.dng格式…