打開文件和關閉文件

来源:http://www.cnblogs.com/web1013/archive/2016/06/05/5551473.html
-Advertisement-
Play Games

1 打開文件 在對文件進行讀、寫操作之前,首先要解決的問題是如何把程式中要讀、寫的文件與磁碟上實際的數據文件聯繫起來。在 C 語言中這並不困難,只需調用 C 語言提供的庫函數 fopen “打開”文件就可實現這些聯繫。fopen 函數的一般調用形式為: fopen(文件名,文件使用方式); 函數返回 ...


  1 打開文件

  在對文件進行讀、寫操作之前,首先要解決的問題是如何把程式中要讀、寫的文件與磁碟上實際的數據文件聯繫起來。在 C 語言中這並不困難,只需調用 C 語言提供的庫函數 fopen “打開”文件就可實現這些聯繫。fopen 函數的一般調用形式為:

    fopen(文件名,文件使用方式);

  函數返回一個指向 FILE 類型的指針。例如:

    FILE *fp;

    fp = fopen("file_a", "r");

  fopen 函數調用中有兩個字元串作為參數。第一個字元串中包含了進行讀、寫操作的文件名,用來指定所要打開的文件。本例中,指定的函數名為:file_a。第二個字元串中指定了文件的使用方式,用戶可通過這個參數來指定對文件的使用意圖。

  若以上函數調用成功,函數返回一個 FILE 類型的指針,賦給文件指針變數 fp,從而把指針 fp與文件 file_a 聯繫起來。也就是說,在此調用後指針 fp 就指向了文件 file_a。當打開文件時出現了錯誤,fopen 函數將返回 NULL。為保證在程式中使用正確打開的文件,建議用以下程式段。當在打開文件發生錯誤時,使程式停止運行:

    #include <stdlib.h>

    ...

    if ((fp = fopen("file_a", "r")) == NULL)

    {

      printf("Cannot open this file !\n");

      exit(0);  //註意:使用 exit 函數時,必須包含 stdlib.h 頭文件

    }

  C 語言中,最常用的文件使用方式及其含義如下:

  (1)“r”。為讀而打開文本文件。當指定這種方式時,對打開的文件只能進行“讀”操作。若指定的文件不存在,則會出錯;另外一些情況,如企圖去讀一個不允許讀的文件時,也會出錯。

  (2)“rb”。為讀而打開一個二進位文件。其餘功能與 “r” 相同。

  (3)“w”。為寫而打開文本文件。如果指定的文件不存在,系統將用在 fopen 調用中指定的文件名建立一個新文件;如果指定的文件已存在,則將從文件的起始位置開始寫,文件中原有的內容將全部消失。

  (4)“wb”。為寫而打開一個二進位文件。可以在指定文件位置進行寫操作,其餘功能與 “w” 相似。

  (5)“a”。為在文件後面添加數據而打開文本文件。如果指定的文件不存在,系統將用在 fopen 調用中指定的文件名建立一個新文件;如果指定的文件已存在,則文件中原有的內容將保存,新的數據寫在原有內容之後。

  (6)“ab”。為在文件後面添加數據而打開一個二進位文件。其餘功能與 “a” 相同。

  (7)“r+”。為讀和寫而打開文本文件。用這種方式時,指定的文件應當已經存在,既可以對該文件進行讀,也可以對該文件進行寫,在讀和寫操作之間不必關閉文件。只是對於文本文件來說,讀和寫總是從文件的起始位置開始。在寫新的數據時,只覆蓋新數據所占的空間,其後的老數據並不丟失。

  (8)“rb+”。為讀和寫而打開一個二進位文件。功能與 “r+” 相同,只是在讀和寫時,可以由位置函數設置讀和寫的起始位置,也就是說不一定從文件的起始位置開始讀和寫。

  (9)“w+”。首先建立一個新文件,進行寫操作,隨後可以從頭開始讀。如果指定的文件已存在,則原有的內容將全部消失。

  (10)“wb+”。功能與 “w+” 相同,只是在隨後的讀和寫時,可以由位置函數設置讀和寫的起始位置。

  (11)“a+”。功能與 “a” 相同,只是在文件尾部添加新的數據之後,可以從頭開始讀。

  (12)“ab+”。功能與 “a+” 相同,只是在文件尾部添加新的數據之後,可以由位置函數設置開始讀的起始位置。

  當運行一個 C 程式時,系統將負責自動打開三個文件,這三個文件分別是標準輸入文件、標準輸出文件和標準出錯文件,並規定相應的文件指針為 stdin、sdtout、stderr,它們已在 stdio.h 頭文件中進行了說明。通常情況下,stdin 與鍵盤連接、stdout 和 stderr 與終端屏幕連接。註意:這些指針是常量,不是變數,因此不能重新賦值。

  2 關閉文件

  當對文件的讀(寫)操作完成後,必須將它關閉。關閉文件可以調用庫函數 fclose 實現,fclose 函數的調用形式如下:

    fclose(文件指針);

  若 fp 是指向文件 file_a 的文件指針,當執行了 fclose(fp); 之後,若對文件 file_a 的操作方式為“讀”方式,則將使文件指針 fp 與文件 file_a 脫離聯繫。在此之後,可以重新分配文件指針 fp 去指向其他文件。若對文件 file_a 的操作方式為“寫”方式,則系統首先把該文件緩衝區中的剩餘數據全部輸出到文件中,然後使文件指針 fp 和文件 file_a 脫離聯繫。由此可見,完成對文件的操作後,應當關閉文件,否則文件緩衝區中的剩餘數據將丟失。

  當成功執行了關閉操作,函數返回0,否則返回非0。


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

-Advertisement-
Play Games
更多相關文章
  • 外部動作——>事件源(組件)——>事件對象——>監聽器 獲取Frame對象,與上節一樣 調用Frame對象的addWindowListener()方法,參數:WindowListener對象,WindowListener是個介面,裡面有七個方法要實現,找實現子類WindowAdapter,匿名內部類 ...
  • scala中的字元串類就是java中的java.lang.String類。不過scala也為String提供了一個富封裝類:scala.runtime.RichString。 scala可以將java.lang.String類自動轉換為scala.runtime.RichString類。這樣就可以非... ...
  • 本章講述java設計模式中,策略模式相關的知識點。 1.策略模式定義 策略模式,又叫演算法簇模式,就是定義了不同的演算法族,並且之間可以互相替換,此模式讓演算法的變化獨立於使用演算法的客戶。策略模式屬於對象的行為模式。其用意是針對一組演算法,將每一個演算法封裝到具有共同介面的獨立的類中,從而使得它們可以相互替換 ...
  • 對於多位寬的數據線,在diamond xxx之前,管腳綁定格式是(假如數據是input wire[1:0] din) LOCATE COMP "din_0" SITE "P16" ;LOCATE COMP "din_1" SITE "P15" ;/*******這種格式是不是很變態,和altera、 ...
  • 1018: A+B again 題目描述 谷學長有一個非常簡單的問題給你,給你兩個整數A和B,你的任務是計算A+B。 谷學長有一個非常簡單的問題給你,給你兩個整數A和B,你的任務是計算A+B。 輸入 輸入的第一行包含一個整數T(T<=20)表示測試實例的個數,然後2*T行,分別表示A和B兩個正整數。 ...
  • 步驟: ...
  • 今天把一個列表轉換成字元串輸出的時候出現了UnicodeEncodeError: 'ascii' codec can't encode characters in position 32-34: ordinal not in range(128)問題,使用的是ulipad編譯器。 解決方法1: 在開 ...
  • 設計模式(Design pattern)是一套被反覆使用、多數人知曉的、經過分類編目的、代碼設計經驗的總結。使用設計模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。毫無疑問,設計模式於己於他人於系統都是多贏的,設計模式使代碼編製真正工程化,設計模式是軟體工程的基石,如同大廈的一塊塊磚石 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...