使用fopen等標準C庫來操作文件

fopen

需要的頭文件:

#include <stdio.h>

函數原型:

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

參數:

  • pathname: 文件路徑
  • mode:
  • “r” :以只讀方式打開文件,該文件必須存在。
  • “w” :打開只寫文件,若文件存在則文件長度清為0,即該文件內容會消失。若文件不存在則建立該文件。
  • “a” :以附加的方式打開只寫文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾,即文件原先的內容會被保留。(EOF符保留)
  • “r+” :以可讀寫方式打開文件,該文件必須存在。
  • “w+” :打開可讀寫文件,若文件存在則文件長度清為零,即該文件內容會消失。若文件不存在則建立該文件。
  • “a+”:以附加方式打開可讀寫的文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾后,即文件原先的內容會被保留。 (原來的EOF符不保留)
  • “rb” :只讀打開一個二進制文件,只允許讀數據。
  • “wb” :只寫打開或建立一個二進制文件,只允許寫數據。
  • “ab” :追加打開一個二進制文件,并在文件末尾寫數據。
  • “rb+” :讀寫打開一個二進制文件,允許讀寫數據,文件必須存在。
  • “wb+” :讀寫打開或建立一個二進制文件,允許讀和寫。
  • “ab+” :讀寫打開一個二進制文件,允許讀,或在文件末追加數據。
  • “rt” :只讀打開一個文本文件,只允許讀數據。
  • “wt” :只寫打開或建立一個文本文件,只允許寫數據。
  • “at” :追加打開一個文本文件,并在文件末尾寫數據。
  • “rt+” :讀寫打開一個文本文件,允許讀和寫。
  • “wt+” :讀寫打開或建立一個文本文件,允許讀寫。
  • “at+” :讀寫打開一個文本文件,允許讀,或在文件末追加數據。

打開方式總結:

① 打開是否為二進制,用“b”標識;

② 讀寫方式有以下幾種:只讀、只寫、讀寫、追加只寫、追加讀寫。

③ 對文件是否必須存在,以及存在時是清空還是追加會有不同的響應。具體判斷如下圖:

參考:fopen函數mode參數詳解_fopen mode_allinallinallin的博客-CSDN博客

  • 返回值:文件順利打開后,指向該流的文件指針就會被返回,若文件打開失敗則返回NULL。

fclose

?需要的頭文件:

#include <stdio.h>

函數原型:

 int fclose(FILE *stream);

參數:

  • stream: 文件指針(也就是fopen成功之后返回的指針

fread 和 fwrite

?需要的頭文件:

#include <stdio.h>

函數原型:

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);

參數:

  • ptr: 指向“數據讀取到之后存儲到的緩存區”/“要寫入的數據存放的緩存區”的指針
  • size:?讀取/寫入 的 基本單元 字節大小 , 單位是字節 , 且一般是緩沖的單位大小
  • 如果緩沖區是 char 數組 , 則該參數的值是 sizeof(char) ;
  • 如果緩沖區是 int 數組 , 則該參數的值是 sizeof(int) ;
  • nmemb: 讀取/寫入 的 基本單元 個數
  • stream:?文件指針
  • 返回值 :?實際從文件中讀取/寫入的 基本單元 個數 ; 讀取/寫入的字節數是 基本單元數 * 基本單元字節大小?
  • 對于寫write:哪怕size設置基本單元的大小是100個char,但是nmemb設置了1,那么返回值就是1, 返回值嚴格跟隨nmemb的值,但是當緩沖區的數據已經全部寫完的時候,就不會再繼續增加內容了,只不過進行無意義的寫操作使得最后寫的次數等于nmemb
  • 對于讀read,同樣返回值大部分情況下跟隨nmemb的值,除了:當給出的讀取緩存區已經已經讀滿了或者已經沒東西可讀了,那么就不會再讀了,并且返回已經讀的基本單元個數

fseek

?需要的頭文件:

#include <stdio.h>

函數原型:

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

參數:

  • stream: 文件指針
  • offset: 偏移量
  • whence: SEEK_SET(頭)或 SEEK_CUR(當前) 或 SEEK_END(尾)
  • 返回值:如果執行成功 , 則返回 0 , 失敗返回非 0 , 并設置 error 錯誤代碼

實操演示

demo9.c:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>int main()
{FILE *fp;char *write_buf = "mjmmm";char *read_buf;fp = fopen("./mjm.txt","w+");int count = fwrite(write_buf, sizeof(char), strlen(write_buf),fp);// fwrite(write_buf, sizeof(char)*strlen(write_buf), 1,fp);printf("%d bytes has been written\n",count);fseek(fp,0,SEEK_SET);read_buf = (char *)malloc(sizeof(char)*count);fread(read_buf, sizeof(char),strlen(write_buf),fp); //注意此時第三個參數不能使用 strlen(read_buf), 因為read_buf中沒有任何有效參數,所以會是0//fread(read_buf, sizeof(char)*strlen(write_buf),1,fp);printf("context:%s\n",read_buf);fclose(fp);return 0;
}

運行代碼:

打開mjm.txt:

?

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

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

相關文章

騰訊出了一個新聊天軟件M8

眾所周知&#xff0c;如今國內互聯網&#xff0c;微信和QQ無疑是社交領域的霸主。 下載:https://www.123pan.com/s/BP5A-RW4xh.html 不過&#xff0c;它們也有各自局限性&#xff0c;比如難以結識新朋友、功能過于復雜等。 這讓用戶產生厭倦&#xff0c;再加上近幾年AI、元宇…

PHP之PHPExcel

include PHPExcel.php; include PHPExcel/Writer/Excel2007.php; //或者include PHPExcel/Writer/Excel5.php; 用于輸出.xls的 //創建一個excel $objPHPExcel new PHPExcel(); // 輸出Excel表格到瀏覽器下載 header(Content-Type: application/vnd.ms-excel); header(Content-…

使用requests如何實現自動登錄

不知道大家有沒有注意到&#xff0c;好多網站我們登錄過后&#xff0c;在之后的某段時間內訪問該網頁時&#xff0c;不會給出請登錄的提示&#xff0c;時間到期后就會提示請登錄&#xff01;這樣在使用爬蟲訪問網頁時還要登錄&#xff0c;打亂我們的節奏&#xff0c;那么如何使…

考研408 | 【計算機網絡】 數據鏈路層

導圖&#xff1a; 數據鏈路層概念&#xff1a; 結點&#xff1a;主機、路由器 鏈路&#xff1a;網絡中兩個結點之間的物理通道&#xff0c;鏈路的傳輸介質主要有雙絞線、光纖和微波。分為有線鏈路、無線鏈路。 數據鏈路&#xff1a;網絡中兩個結點之間的邏輯通道&#xff0…

河道水位自動監測預警 yolov5

河道水位自動監測預警系統基于yolov5網絡模型AI視頻智能水尺讀數技術&#xff0c;河道水位自動監測預警系統通過在河道周邊布設監控攝像頭&#xff0c;實時監測水位的變化&#xff0c;一旦水位超過預設閾值&#xff0c;將自動發出預警信號&#xff0c;并提示相關人員采取相應的…

Three.js 實現材質邊緣通道發光效果

相關API的使用&#xff1a; 1. EffectComposer&#xff08;渲染后處理的通用框架&#xff0c;用于將多個渲染通道&#xff08;pass&#xff09;組合在一起創建特定的視覺效果&#xff09; 2. RenderPass(是用于渲染場景的通道。它將場景和相機作為輸入&#xff0c;使用Three.…

使用script標簽解決跨域問題,但是只能使用get請求,且不需要獲取get請求的數據,例如埋點,只需要觸發后發送get請求,而不需要獲取返回的參數

在項目中&#xff0c;使用埋點的時候&#xff0c;因為使用的是外部提供的接口&#xff0c;所以直接請求的時候&#xff0c;前端會報跨域的問題&#xff0c;本著不麻煩后端的想法&#xff0c;怎怎么前端實現跨域而完全不需要后段的配合&#xff0c;這時候就想到了通過script標簽…

【簡單認識zookeeper+kafka分布式消息隊列集群的部署】

文章目錄 一、zookeeper1、定義2、工作機制3、Zookeeper 特點4、Zookeeper 數據結構5、Zookeeper 應用場景6、Zookeeper 選舉機制&#xff08;1&#xff09;第一次啟動選舉機制&#xff08;2&#xff09;非第一次啟動選舉機制 7、部署zookeeper群集 二、消息隊列概述1、為什么需…

百度云盤發展歷程與影響

摘要&#xff1a; 百度云盤作為中國領先的云存儲與共享服務提供商&#xff0c;自其創立至今經歷了多個階段的發展與變革。本論文通過對百度云盤的歷史回顧與分析&#xff0c;探討了其在技術、商業模式、用戶體驗以及對社會的影響等方面的演變。同時&#xff0c;還分析了在競爭激…

使用luarocks安裝cjson并使用cjson

1.luarocks安裝 wget https://luarocks.org/releases/luarocks-3.3.1.tar.gz --no-check-certificatels -lrthtar -xvf luarocks-3.3.1.tar.gz mv luarocks-3.3.1 /usr/local/cd /usr/local/luarocks-3.3.1/./configure --prefix/usr/local/luarocks-3.3.1 vim /etc/profilePAT…

Mac下??Git如何下載/上傳遠程倉庫

使用終端檢查電腦是否安裝Git git --version 通過此文章安裝Git ?? ???????傳送門&#x1f310; 方式1??使用終端操作 1.下載——克隆遠程倉庫到本地 git clone [遠程地址] 例&#xff1a;git clone https://gitee.com/lcannal/movie.git? 2.編…

Windows - UWP - 為UWP應用創建桌面快捷方式

Windows - UWP - 為UWP應用創建桌面快捷方式 前言 這是一個較為簡單的方式&#xff0c;不需要過多的命令行。 How 首先Win R -> shell:AppsFolder -> 回車&#xff0c; 這將顯示電腦上的已安裝應用&#xff08;Win32 & UWP&#xff09;&#xff1a; 找到想要創建…

【Nginx】Nginx負載均衡

負載均衡&#xff1a;通過反向代理來實現 Nginx的七層代理和四層代理&#xff1a; 七層是最常用的反向代理方式&#xff0c;只能配置在nginx配置文件的http模塊當中 &#xff1b;配置的方法名稱為&#xff1a;upstream模塊&#xff0c;不能寫在server中也不能寫在location中&a…

ZABBIX 6.4的完全安裝步驟

此安裝文檔是我一步一步的驗證過的&#xff0c;按步驟來可以順暢的安成ZABBIX6.4的部署。 Zabbix 主要有以下幾個組件組成&#xff1a; Zabbix Server6.4&#xff1a;Zabbix 服務端&#xff0c;是 Zabbix 的核心組件。它負責接收監控數據并觸發告警&#xff0c;還負責將監控數…

Leetcode

持續更新中。。。。。。。。。。。。。。 day 20230811 /*** 給你一個正方形矩陣 mat&#xff0c;請你返回矩陣對角線元素的和。* <p>* 請你返回在矩陣主對角線上的元素和副對角線上且不在主對角線上元素的和* <p>* 不包括 相交的元素只計算一次* <p>* 輸入&…

(2023Arxiv)Meta-Transformer: A Unified Framework for Multimodal Learning

論文鏈接&#xff1a;https://arxiv.org/abs/2307.10802 代碼鏈接&#xff1a;https://github.com/invictus717/MetaTransformer 項目主頁&#xff1a;https://kxgong.github.io/meta_transformer/ 【注】&#xff1a;根據實驗結果來看&#xff0c;每次輸入一種數據源進行處…

Java項目初始化ES、MYSQL表結構及表數據

一、初始化MYSQL數據 public boolean initMysql() throws Exception {log.info("initMysql.start");//獲取所連接的數據庫名稱String database systemMapper.getDatabase();if (StringUtils.isBlank(database)) {throw new BusinessException("連接數據庫失敗,…

微信小程序時鐘

微信小程序自定義時鐘&#xff0c;模擬翻牌時鐘。1、頁面布局 <view class"date-time-box"><view class"date-box">{{nowDate}}</view><view class"time-box"><view><image class"pic01 {{move[0]?move…

代碼隨想錄算法訓練營第45天|動態規劃part07

8.11 周五 70. 爬樓梯 &#xff08;進階&#xff09; 322. 零錢兌換 279.完全平方數 詳細布置 70. 爬樓梯 &#xff08;進階&#xff09; 題目&#xff1a;一次可爬1或2個臺階&#xff0c;問n個臺階有多少種方式 題解&#xff1a; 1、轉換為完全背包問題&#xff0c;nums[1…

Ajax-AJAX請求的不同發送方式

&#x1f954;&#xff1a;你一定能成為想要成為的人 發送AJAX請求不同方式 發送AJAX請求不同方式1、jQuery發送AJAX請求2、axios發送AJAX請求&#xff08;重點&#xff09;3、fetch發送AJAX請求 發送AJAX請求不同方式 1、jQuery發送AJAX請求 首先需要jquery的js文件&#xf…