第10章 檔案與資料夾處理 10-1 C語言的檔案輸入與輸出 10-2 文字檔案的讀寫 10-3 二進位檔案的讀寫

Slides:



Advertisements
Similar presentations
C语言程序设计 主讲教师 :张群燕 电话:
Advertisements

補充: Input from a text file
雷 霆 战 机 By—谷恩轩&余万全.
第 5 章 文件I/O操作.
C程序设计 第10章 文 件 主讲教师: 鲁 萍 西安建筑科技大学 理学院.
第十三章 文件.
第8章 字元與字串處理 8-1 C語言的字元檢查函數 8-2 C語言的字串 8-3 字串的輸入與輸出 8-4 指標與字串
複習 struct score_Type{ int chinese,english; }; struct my_Type{
C File System.
程式設計 博碩文化出版發行.
C 程序设计实例 1. 问题描述 2. 数据结构 3. 算法分析 4. 参考程序 5. 改进说明.
C 程式設計— 結構 台大資訊工程學系 資訊系統訓練班.
计算概论 第二十一讲 文件操作 北京大学信息学院.
补充内容 结构体 概述 定义结构体类型和定义结构体变量 结构体变量的引用 结构体变量的初始化 指针与结构体 用typedef定义类型的别名.
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
第10章 文件操作.
第十一章 文件 文件概述 文件操作 文件操作实例 本章小结 作业: 练习:
張智星 (Roger Jang) 清大資工系 多媒體檢索實驗室
计算概论 第十八讲 C语言高级编程 结构与习题课 北京大学信息学院.
第10章 文件操作.
C 程式設計— 檔案處理 台大資訊工程學系 資訊系統訓練班.
第4章 字串及資料的輸入/輸出格式.
C 語言簡介 - 2.
C语言程序设计 李祥.
C 程式設計— 結構 台大資訊工程學系 資訊系統訓練班.
11.1 文件的基本概念 11.2 文件的打开与关闭 11.3 文件的顺序读写 11.4 文件的随机读写 11.5 文件检测
第5章 堆疊(Stacks) 5-1 堆疊的基礎 5-2 堆疊的表示法 5-3 堆疊的應用 - 運算式的計算與轉換
第十二章 文件 12.1 C文件概述 文件:存储在外部介质上数据的集合,是操作系统数据管理的单位 文件分类 按文件的逻辑结构: 按存储介质:
第二章 顺序结构 1 数据类型和标识符、常量与变量 2 运算符和表达式 3 简单的输入输出 4 程序举例.
fp=fopen("CD2.dat","wb"); fwrite(&min,8,1,fp); fclose(fp);
第4章 MATLAB文件操作 4.1 文件的打开与关闭 4.2 文件的读写操作 4.3 数据文件定位.
檔案 將資料存入磁碟或由磁碟取出資料的方式, 稱為檔案存取處理。 C語言的檔案處理 C++語言的檔案處理.
程式設計 博碩文化出版發行.
第九章 文件 程序数据标准输入输出设备 程序数据文件 数据流和文件 文件的打开和关闭 文件读写函数.
File(檔案處理) 學習目標:開檔、讀檔、更新檔與關閉檔案.
THE C PROGRAMMING LANGUAGE
第10章 文件操作.
本章中將會更詳細地考慮有關重複的概念,並且會 介紹for和do…while等兩種用來控制重複的敘述 式。 也將會介紹switch多重選擇敘述式。 我們會討論直接和迅速離開某種控制敘述式的 break敘述式,以及用來跳過重複敘述式本體剩餘 部份的continue敘述式。 本章會討論用來組合控制條件的邏輯運算子,最後.
第10章 檔案與資料夾處理 10-1 檔案的基礎 10-2 文字檔案的讀寫 10-3 二進位檔案的讀寫 10-4 檔案與資料夾處理.
第5章 文件.
第9章 文件操作 文件 使用文件的目的 操作系统管理数据的基本单位 存储在外存储器上的数据的集合
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
第5讲 结构化程序设计(Part II) 周水庚 2018年10月11日.
研讨课4 文件操作.
第4章 顺序程序设计.
PHP5與MySQL4 入門學習指南 凱文瑞克 著 第 16 章 檔案處理.
第1章 概述 本章要点: C语言程序结构和特点 C语言程序的基本符号与关键字 C语言程序的编辑及运行 学习方法建议:
一、文件的基本概念 第十三章 文 件 所谓“文件”是指一组相关数据的有序集合。 这个数据集有一
OOP6 結構Struct 黃兆武.
第7章 输入/输出流 文件和I/O流概述 标准I/O流的对象及其成员函数 文件流.
第3章 變數、算術運算、 數學函數及輸入輸出.
實習十 開讀檔練習.
C標準輸出入函數庫 與 作業系統.
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
File Input and Output Chap. 11: 施威銘的書 Chap. 7: K&R.
本节内容 文件读写 视频提供:昆山爱达人信息技术有限公司.
本节内容 指针类型.
第13章 文 件.
C 程式設計— 檔案處理 台大資訊工程學系 資訊系統訓練班.
結構、檔案處理(Structure, File)
第七章 文件 7.1 文件的基本概念 7.2 文件类型指针 7.3 文件的打开与关闭 7.4 文件的读/写 7.5 文件的随机读/写
第18讲 从C到C++ 计算机与通信工程学院.
2018 Operating Systems 作業系統實習 助教:林欣穎 實驗室:720A Lab2.
C语言程序设计 第13章 文件操作.
陣列與檔案處理 授課:張朝麟 日期:2009/3/11.
本节内容 指针类型 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
Q6. 某學校將學生的電話號碼存貯在一個文字檔'telist.txt'。 在這交字檔中,每行有14個字符,代表學生班別、班號和電話號碼,
Introduction to the C Programming Language
安排座位.
C++语言程序设计 C++语言程序设计 第二章 基本数据类型与表达式 第十一组 C++语言程序设计.
Presentation transcript:

第10章 檔案與資料夾處理 10-1 C語言的檔案輸入與輸出 10-2 文字檔案的讀寫 10-3 二進位檔案的讀寫 10-4 檔案與資料夾處理

10-1 C語言的檔案輸入與輸出-說明 「檔案」(Files)是儲存在電腦周邊裝置的位元組資料集合,通常是儲存在軟式或硬式磁碟機的資料,程式可以將輸出的資料儲存在檔案中保存,或是將檔案視為輸入資料讀取檔案內容,輸出到控制台或印表機。 在檔案儲存的位元組資料可能被解譯成字元、數值、整數、字串或資料庫的記錄,取決於C程式開啟的檔案存取類型。C語言標準函式庫的「檔案輸入與輸出」(File Input/Output,簡稱File I/O)函數可以處理二種檔案類型:文字和二進位檔案。

10-1 C語言的檔案輸入與輸出-文字檔案 文字檔案儲存的是字元資料,文字檔案視為一種「文字串流」(Text Stream),串流可以想像成水龍頭流出的是一個個字元,換句話說,處理文字檔案只能向前一個個循序處理字元,也稱為「循序檔案」(Squential Files),如同水往低處流,並不能回頭處理之前處理過的字元。 文字檔案擁有讀取(Input)、寫入(Output)和新增(Append)三種操作,可以將字元資料寫入檔案、寫入檔尾與讀取文字檔案的內容,例如:Windows記錄檔或使用【記事本】建立的是一種文字檔案。

10-1 C語言的檔案輸入與輸出-二進位檔案 以作業系統的角度來說,儲存在磁碟機的二進位(Binary)檔和文字檔案並沒有什麼不同,C語言標準函式庫存取的二進位檔是指沒有處理過的「位元組」(Bytes)資料,即「二進位串流」(Binary Stream),其特性是寫入和讀出檔案的資料完全相同。 當檔案以二進位檔案方式開啟,資料並不會作任何格式轉換(主要是指處理換行和檔案的結束字元),讀取的是位元組資料,不過在C程式可以將它轉換成字元資料,換句話說,讀取的資料是字元或位元組,全憑程式如何解釋它。

10-2 文字檔案的讀寫 10-2-1 開啟與關閉文字檔案 10-2-2 讀寫字串到文字檔案 10-2-3 讀寫字元到文字檔案 10-2-4 格式化讀寫文字檔案

10-2-1 開啟與關閉文字檔案-函數說明 在C語言開啟和關閉檔案,都是使用<stdio.h>標頭檔宣告的FILE檔案指標來識別開啟的檔案(因為在同一個C程式可以開啟多個檔案),相關函數說明如下表所示:

10-2-1 開啟與關閉文字檔案-範例 在程式只需宣告FILE指標變數fp,就可以使用fopen()函數開啟檔案,如下所示: fp = fopen("filename", "w"); 上述函數的第1個參數是檔案名稱或檔案的完整路徑(請注意!路徑「\」符號在某些作業系統需要使用逸出字元「\\」,例如:“C:\\C++\\test.c"),第2個參數是檔案開啟模式字串。

10-2-1 開啟與關閉文字檔案-開啟模式 文字檔案支援的開啟模式,如下表所示:

10-2-1 開啟與關閉文字檔案-檢查是否開啟成功 如果fopen()函數傳回NULL表示檔案開啟失敗,可以使用if條件檢查檔案指標,如下所示: if ( fp == NULL ) { printf("錯誤: 檔案開啟失敗....\n"); exit(1); } 上述if條件檢查檔案指標變數fp,如果是NULL就表示檔案開啟錯誤,所以顯示錯誤訊息,接著使用<stdlib.h>標頭檔的exit()函數強迫結束程式執行,exit()函數的參數是傳給作業系統,如為非零值,表示程式執行發生錯誤。

10-2-1 開啟與關閉文字檔案-關閉檔案 最後在執行完檔案操作後,執行fclose()函數關閉檔案,如下所示: fclose(fp); 上述函數的參數就是欲關閉檔案的FILE指標變數。

10-2-2 讀寫字串到文字檔案-函數說明 在C程式使用fopen()函數成功開啟檔案後,就可以執行檔案處理函數寫入或讀取文字檔案內容,從檔案讀寫字串的相關函數說明,如下表所示:

10-2-2 讀寫字串到文字檔案-範例 在C程式的文字檔案讀寫,可以使用fputs()函數寫入字串到文字檔案,如下所示: fputs(line , fp); 上述函數將字串line寫入檔案指標fp。讀取檔案內容可以使用fgets()函數配合while迴圈讀取整個檔案內容,如下所示: while( fgets(line, 50 ,fp) != NULL ) { } 上述while迴圈以一次一行的方式讀取檔案,每一行最多為50-1即49個字元,直到fgets()函數傳回NULL為止,也就是到達檔尾。

10-2-3 讀寫字元到文字檔案-函數說明 類似第4章的putchar()和getchar()字元輸出和輸入函數,檔案I/O也提供讀寫字元的putc()和getc()函數,如下表所示:

10-2-3 讀寫字元到文字檔案-範例 在C程式寫入字元到文字檔案可以使用putc()函數,如下所示: putc(line[i][j] , fp); 上述程式碼將二維字元陣列的line[i][j]元素寫入檔案fp。如果使用getc()函數讀取整個檔案內容,一樣是配合while迴圈讀取,如下所示: while ((c = getc(fp))!= EOF ) putchar(c); 上述while迴圈以一次一個字元的方式讀取檔案,直到getc()函數傳回EOF為止,也就是到達檔尾。

10-2-4 格式化讀寫文字檔案-函數說明 在第4章的printf()和scanf()格式化輸出和輸入函數,檔案I/O也有對應的fprintf()和fscanf()格式化輸出輸入函數,如下表所示:

10-2-4 格式化讀寫文字檔案-範例 fprintf()格式化輸出函數可以使用格式字串來編排寫入檔案的字串內容,如下所示: fprintf(fp, “%d=> %s\n”, 1, line); 上述程式碼是將格式字串輸入的內容寫入檔案fp,可以看到是組合整數常數和字串line的字串內容。同樣的,我們可以使用fscanf()函數配合while迴圈讀取整個檔案內容,如下所示: while ( fscanf(fp,"%s", line) != EOF ) printf("%s\n", line); 上述while迴圈一次讀取一個格式字串的資料,以此例是字串,直到傳回EOF為止,也就是到達檔尾。

10-3 二進位檔案的讀寫 10-3-1 寫入記錄到二進位檔案 10-3-2 循序讀取檔案的記錄 10-3-3 隨機存取記錄資料

10-3 二進位檔案的讀寫-說明 二進位檔案讀寫除了可以使用文字檔案的循序方式存取,還可以使用隨機方式,檔案是使用記錄為單位來進行存取,能夠隨機存取任一筆記錄或更改指定記錄的資料。 C語言的二進位檔案一樣是使用fopen()函數開啟和fclose()函數關閉檔案,只是使用不同的開啟模式字串,在程式宣告FILE指標變數fp後,就可以開啟指定的二進位檔案,如下所示: FILE *fp; fp = fopen("filename", "wb");

10-3 二進位檔案的讀寫-開啟模式 二進位檔案支援的開啟模式,如下表所示:

10-3-1 寫入記錄到二進位檔案-結構宣告 隨機存取是以記錄為存取單位,在建立二進位檔案的隨機存取前,C程式需要宣告結構來儲存記錄資料,例如:學生資料的record結構,如下所示: struct record { char name[20]; int age; float score; }; typedef struct record student; 上述結構擁有姓名name、年齡age和成績score的成員變數,為了方便宣告,筆者建立新型態student。

10-3-1 寫入記錄到二進位檔案-函數說明 在使用fopen()函數開啟二進位檔案後,就可以呼叫fwrite()函數寫入結構的記錄資料,相關函數說明,如下表所示:

10-3-1 寫入記錄到二進位檔案-範例 以本節的student結構為例,如下所示: student temp; ……… fwrite(&temp, sizeof(temp), 1, fp); 以此例是寫入一筆結構temp到檔案fp。 雖然檔案讀寫錯誤很少發生,不過為了避免磁碟已滿等讀寫錯誤,在讀寫操作後,可以使用ferror()函數檢查是否讀寫錯誤,如下所示: if ( ferror(fp) ) printf("錯誤: 寫入錯誤!\n"); else printf("已經寫入3筆記錄!\n");

10-3-2 循序讀取檔案的記錄-相關函數說明 當C程式在二進位檔案呼叫fwrite()函數寫入記錄資料後,我們可以使用fread()函數配合迴圈將一筆筆記錄循序讀出,相關函數說明,如下表所示:

10-3-2 循序讀取檔案的記錄-範例 在二進位檔案可以使用feof()函數檢查是否讀到檔尾,只需配合while迴圈即可讀取檔案的所有記錄,如下所示: while ( !feof(fp) ) { if ( fread(&std, sizeof(std), 1, fp) ) { } } 上述while迴圈使用fread()函數讀取檔案直到feof()函數傳回非零值,也就是到達檔尾。

10-3-3 隨機存取記錄資料-相關函數說明 C程式只需先呼叫fseek()函數找到指定記錄的檔案位置,即可隨機存取指定的記錄資料,相關函數說明,如下表所示:

10-3-3 隨機存取記錄資料-範例 在本節程式範例的fseek()函數中,offset參數是位移量,可以使用記錄數和結構大小計算而得,如下所示: fseek(fp, rec*sizeof(std), SEEK_SET); 程式碼是從SEEK_SET位置的檔案開頭開始,位移量是rec*sizeof(std)位元組數,rec是記錄編號從0開始,使用sizeof運算子計算結構大小,origin參數值有三種,如下所示: SEEK_SET:從檔案開頭。 SEEK_CUR:從檔案現在的位置。 SEEK_END:從檔案結尾。

10-4 檔案與資料夾處理 10-4-1 更改檔名與刪除檔案 10-4-2 建立、刪除和切換目錄 10-4-3 複製檔案

10-4-1 更改檔名與刪除檔案 在C語言標準函式庫<stdio.h>標頭檔提供更改檔案名稱和刪除檔案的函數,其說明如下表所示:

10-4-2 建立、刪除和切換目錄 在<dir.h>標頭檔(微軟Visual C++ 2005語言是使用<direct.h>標頭檔)提供取得工作路徑、切換、建立和刪除資料夾的函數,如下表所示:

10-4-3 複製檔案 在C語言的標準函式庫並沒有提供檔案複製函數,不過只需使用本章前的檔案讀寫函數,在開啟2個檔案指標sfp和dfp後,即可使用while迴圈複製檔案內容,如下所示: while ( (c = getc(sfp)) != EOF ) putc(c, dfp); 上述while迴圈從檔案指標sfp呼叫getc()函數讀取一個個字元,然後呼叫putc()函數寫入檔案指標dfp,換句話說,檔案指標sfp的檔案內容就會複製到dfp。