首頁 後端開發 C#.Net教程 c語言檔案讀寫操作有哪些?

c語言檔案讀寫操作有哪些?

Jul 27, 2020 pm 01:44 PM
c語言

c語言檔案讀寫操作有:1、讀寫檔案中字元的函數,程式碼為【int fgetc(FILE *stream)】;2、讀寫檔案中字串的函數,程式碼為【 int fputs(char *string,FILE *stream)】。

c語言檔案讀寫操作有哪些?

c語言檔案讀寫操作有:

1.檔案的開啟函數fopen()

檔案的開啟操作表示將給使用者指定的檔案在記憶體中分配一個FILE結構區,並將該結構的指標傳回給使用者程序,以後使用者程式就可用此FILE指標來實現對指定檔案的存取操作了。當使用開啟函數時,必須給出檔案名稱、檔案操作方式(讀、寫或讀寫),

如果該檔案名稱不存在,就意味著建立(只對寫入檔案而言,對讀取檔案則出錯),並將檔案指標指向檔案開頭。若已有一個同名文件存在,則刪除該文件,若無同名文件,則建立該文件,並將文件指針指向文件開頭。

fopen(char *filename,char *type);
登入後複製

其中*filename是要開啟檔案的檔案名稱指針,一般用雙引號括起來的檔案名稱表示,也可使用雙反斜線隔開的路徑名稱。而*type參數表示了對開啟檔案的操作方式。其可採用的操作方式如下:

  •   意義"r" 打開,唯讀;

  •  "w" 打開,檔案指標指向頭,只寫;

  •  "a" 打開,指向檔案尾,在已存在檔案中追加;

  • "rb" 開啟一個二進位文件,唯讀;

  •  "wb" 開啟一個二進位文件,只寫;

  •  "ab" 開啟一個二進位文件,進行追加;

  • "r " 以讀取/寫入方式開啟一個已存在的檔案; 

  • "w " 以讀取/寫入方式建立一個新的文字檔案;

  • "a " 以讀取/寫入方式開啟一個檔案檔案進行追加;

  • "rb " 以讀取/寫入方式開啟一個二進位檔案;

  •  "wb " 以讀取/寫入方式建立一個新的二進位檔案;

  • "ab " 以讀/寫方式開啟一個二進位檔案進行追加;

當用fopen()成功的開啟一個檔案時,該函數會傳回一個FILE指針,如果檔案開啟失敗,將會傳回一個NULL指標。

2.關閉檔案函數fclose() 

檔案操作完成後,必須要用fclose()函數關閉,這是因為開啟的檔案寫入時,若檔案緩衝區的空間未被寫入的內容填滿,這些內容不會寫入到開啟的檔案中去而遺失。只有在對開啟的文件進行關閉操作時,停留在文件緩衝區的內容才能寫到該文件中去,從而使文件完整。

再者一旦關閉了文件,該文件對應的FILE結構將被釋放,從而使關閉的文件得到保護,因為這時對該文件的訪問操作將不會進行。文件的關閉也意味著釋放了該文件的緩衝區。

int fclose(FILE *stream);
登入後複製

它表示該函數將關閉FILE指向應的文件,並傳回一個整數值。若成功地關閉了文件,則傳回一個0值,否則傳回一個非0值。

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
int main()
{
    FILE *fp;   //  头文件#include <stdio.h>
    if((fp=fopen("123.txt","w"))==NULL)
    {
        printf("file cannot open \n");
        //exit(0);  头文件#include <stdlib.h>
        //exit结束程序,一般0为正常推出,其它数字为异常,其对应的错误可以自己指定。
    }
    else
        printf("file opened for writing \n");
    if(fclose(fp)!=0)
        printf("file cannot be closed \n");
    else
        printf("file is now closed \n");
    return 0;
}
登入後複製

3.檔案的讀寫

(1).讀寫檔案中字元的函數(一次只讀寫檔案中的一個字元):

int fgetc(FILE *stream);
int getchar(void);
int fputc(int ch,FILE *stream);
int putchar(int ch);
int getc(FILE *stream);
int putc(int ch,FILE *stream);
登入後複製

fgetc()函數將把由流指標指向的檔案中的一個字元讀出,例如: ch=fgetc(fp); 將把流指標fp指向的檔案中的一個字元讀出,並賦給ch,當執行fgetc()函數時,若當時檔案指標指到檔案尾,即遇到檔案結束標誌EOF(其對應值為-1),則該函數傳回一個-1給ch ,在程式中常用檢查該函數傳回值是否為-1來判斷是否已讀到文件尾,從而決定是否繼續。

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
int main()
{
    FILE *fp;
    char ch;
    if((fp=fopen("123.txt","r"))==NULL)
        printf("file cannot open \n");
    else
        printf("file opened for writing \n");
    while((ch=fgetc(fp))!=EOF)
        fputc(ch,stdout); //这里是输出到屏幕
    if(fclose(fp)!=0)
        printf("file cannot be closed \n");
    else
        printf("file is now closed \n");
    return 0;
}
登入後複製

該程式以唯讀方式開啟123.txt文件,在執行while循環時,文件指標每循環一次後移一個字元位置。用fgetc()函數將檔案指標指定的字元讀到ch變數中,然後用fputc()函數在螢幕上顯示,當讀到檔案結束標誌EOF時,關閉該檔案。上面的程式用到了fputc()函數,該函數將字元變數ch的值寫到流指標指定的檔案中去,由於流指標用的是標準輸出(顯示器)的FILE指標stdout,故讀出的字元將在顯示器上顯示。又例如: fputc(ch,fp); 此函數執行結構,將把ch表示的字元送到流指標fp指向的檔案中去。

在TC中,putc()等價於fputc(),getc()等價於fgetc()。 putchar(c)相當於fputc(c,stdout);getchar()相當於fgetc(stdin)。請注意,這裡使用char ch,其實是不科學的,因為最後判斷結束標誌時,是看ch!=EOF,而EOF的值為-1,這顯然和char是不能比較的。所以,某些使用,我們都定義成int ch

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
int main()
{
    FILE *fp;
    if((fp=fopen("123.txt","a"))==NULL)
        printf("file cannot open \n");
    else
        printf("file opened for writing \n");
    char ch=&#39;e&#39;;
    fputc(ch,fp); //输入到文件中
    if(fclose(fp)!=0)
        printf("file cannot be closed \n");
    else
        printf("file is now closed \n");
    return 0;
}
登入後複製

(2).讀寫檔案中字串的函數

char *fgets(char *string,int n,FILE *stream);
char *gets(char *s);
int fprintf(FILE *stream,char *format,variable-list);
int fputs(char *string,FILE *stream);
char *puts(char *s);
int fscanf(FILE *stream,char *format,variable-list);
登入後複製

其中fgets()函数将把由流指针指定的文件中n-1个字符,读到由指针string指向的字符数组中去,例如: fgets(buffer,9,fp); 将把fp指向的文件中的8个字符读到buffer内存区,buffer可以是定义的字符数组,也可以是动态分配的内存区。

注意,fgets()函数读到'/n'就停止,而不管是否达到数目要求。同时在读取字符串的最后加上'/0'。 fgets()函数执行完以后,返回一个指向该串的指针。如果读到文件尾或出错,则均返回一个空指针NULL,所以长用feof()函数来测定是否到了文件尾或者是ferror()函数来测试是否出错,

检测是否已到文件尾,是返回真,否则返回0,其原型是int feof(FILE *stream);

例:if(feof(fp))printf("已到文件尾");

原型是int ferror(FILE *stream);返回流最近的错误代码,可用clearerr()来清除它,clearerr()的原型是void clearerr(FILE *stream);

例:printf("%d",ferror(fp));

例如下面的程序用fgets()函数读test.txt文件中的第一行并显示出来:

#include "stdio.h" 
int main() {
    FILE *fp; 
    char str[128]; 
    if((fp=fopen("123.txt","r"))==NULL) {
        printf("cannot open file/n"); exit(1);
    } 
    while(!feof(fp)) {
        if(fgets(str,128,fp)!=NULL)
        printf("%s",str);
    }
    fclose(fp);
}
登入後複製

相关学习推荐:C视频教程

以上是c語言檔案讀寫操作有哪些?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1660
14
CakePHP 教程
1416
52
Laravel 教程
1310
25
PHP教程
1259
29
C# 教程
1233
24
C語言數據結構:樹和圖的數據表示與操作 C語言數據結構:樹和圖的數據表示與操作 Apr 04, 2025 am 11:18 AM

C語言數據結構:樹和圖的數據表示與操作樹是一個層次結構的數據結構由節點組成,每個節點包含一個數據元素和指向其子節點的指針二叉樹是一種特殊類型的樹,其中每個節點最多有兩個子節點數據表示structTreeNode{intdata;structTreeNode*left;structTreeNode*right;};操作創建樹遍歷樹(先序、中序、後序)搜索樹插入節點刪除節點圖是一個集合的數據結構,其中的元素是頂點,它們通過邊連接在一起邊可以是帶權或無權的數據表示鄰

C語言文件操作難題的幕後真相 C語言文件操作難題的幕後真相 Apr 04, 2025 am 11:24 AM

文件操作難題的真相:文件打開失敗:權限不足、路徑錯誤、文件被佔用。數據寫入失敗:緩衝區已滿、文件不可寫、磁盤空間不足。其他常見問題:文件遍歷緩慢、文本文件編碼不正確、二進製文件讀取錯誤。

CS-第 3 週 CS-第 3 週 Apr 04, 2025 am 06:06 AM

算法是解決問題的指令集,其執行速度和內存佔用各不相同。編程中,許多算法都基於數據搜索和排序。本文將介紹幾種數據檢索和排序算法。線性搜索假設有一個數組[20,500,10,5,100,1,50],需要查找數字50。線性搜索算法會逐個檢查數組中的每個元素,直到找到目標值或遍歷完整個數組。算法流程圖如下:線性搜索的偽代碼如下:檢查每個元素:如果找到目標值:返回true返回falseC語言實現:#include#includeintmain(void){i

debian readdir如何與其他工具集成 debian readdir如何與其他工具集成 Apr 13, 2025 am 09:42 AM

Debian系統中的readdir函數是用於讀取目錄內容的系統調用,常用於C語言編程。本文將介紹如何將readdir與其他工具集成,以增強其功能。方法一:C語言程序與管道結合首先,編寫一個C程序調用readdir函數並輸出結果:#include#include#includeintmain(intargc,char*argv[]){DIR*dir;structdirent*entry;if(argc!=2){

C語言多線程編程:新手指南與疑難解答 C語言多線程編程:新手指南與疑難解答 Apr 04, 2025 am 10:15 AM

C語言多線程編程指南:創建線程:使用pthread_create()函數,指定線程ID、屬性和線程函數。線程同步:通過互斥鎖、信號量和條件變量防止數據競爭。實戰案例:使用多線程計算斐波那契數,將任務分配給多個線程並同步結果。疑難解答:解決程序崩潰、線程停止響應和性能瓶頸等問題。

c語言如何輸出倒數 c語言如何輸出倒數 Apr 04, 2025 am 08:54 AM

如何在 C 語言中輸出倒數?回答:使用循環語句。步驟:1. 定義變量 n 存儲要輸出的倒數數字;2. 使用 while 循環持續打印 n 直到 n 小於 1;3. 在循環體內,打印出 n 的值;4. 在循環末尾,將 n 減去 1 以輸出下一個更小的倒數。

c語言函數的定義調用聲明格式怎麼搞 c語言函數的定義調用聲明格式怎麼搞 Apr 04, 2025 am 06:03 AM

C語言函數包含定義、調用和聲明。函數定義指定函數名、參數和返回類型,函數體實現功能;函數調用執行函數並提供參數;函數聲明告知編譯器函數類型。值傳遞用於參數傳遞,注意返回類型,保持一致的代碼風格,並在函數中處理錯誤。掌握這些知識有助於編寫優雅、健壯的C代碼。

C 中的整數:一點歷史 C 中的整數:一點歷史 Apr 04, 2025 am 06:09 AM

整數是編程中最基礎的數據類型,堪稱編程的基石。程序員的工作就是賦予這些數字意義,無論軟件多麼複雜,最終都歸結於整數運算,因為處理器只理解整數。為了表示負數,我們引入了二進制補碼;為了表示小數,我們創造了科學計數法,於是有了浮點數。但歸根結底,一切仍然離不開0和1。整數的簡史在C語言中,int幾乎是默認類型。儘管編譯器可能會發出警告,但在許多情況下,你仍然可以寫下這樣的代碼:main(void){return0;}從技術角度來看,這與以下代碼等效:intmain(void){return0;}這種

See all articles