C File System.

Slides:



Advertisements
Similar presentations
第九章 字串 (String).
Advertisements

補充: Input from a text file
基于操作系统的编程复习 张玉宏
雷 霆 战 机 By—谷恩轩&余万全.
第11章 输入输出流类.
任务2: 通报的写作.
第 5 章 文件I/O操作.
C程序设计 第10章 文 件 主讲教师: 鲁 萍 西安建筑科技大学 理学院.
第十三章 文件.
複習 struct score_Type{ int chinese,english; }; struct my_Type{
计算概论 第二十一讲 文件操作 北京大学信息学院.
第7章 Linux环境编程.
第10章 文件操作.
第十一章 文件 文件概述 文件操作 文件操作实例 本章小结 作业: 练习:
Introduction to the C Programming Language
Introduction to the C Programming Language
第10章 文件操作.
C 程式設計— 檔案處理 台大資訊工程學系 資訊系統訓練班.
C 語言簡介 - 2.
Chap 8 指针 8.1 寻找保险箱密码 8.2 角色互换 8.3 冒泡排序 8.4 电码加密 8.5 任意个整数求和*
NO.3.1 SOPC技术 第5章 Nios II 系统的外围设备.
11.1 文件的基本概念 11.2 文件的打开与关闭 11.3 文件的顺序读写 11.4 文件的随机读写 11.5 文件检测
第十二章 文件 12.1 C文件概述 文件:存储在外部介质上数据的集合,是操作系统数据管理的单位 文件分类 按文件的逻辑结构: 按存储介质:
fp=fopen("CD2.dat","wb"); fwrite(&min,8,1,fp); fclose(fp);
第4章 MATLAB文件操作 4.1 文件的打开与关闭 4.2 文件的读写操作 4.3 数据文件定位.
檔案 將資料存入磁碟或由磁碟取出資料的方式, 稱為檔案存取處理。 C語言的檔案處理 C++語言的檔案處理.
程式設計 博碩文化出版發行.
作業系統實習課(四) -檔案管理- 實驗室:720A 助教:鄧執中.
第九章 文件 程序数据标准输入输出设备 程序数据文件 数据流和文件 文件的打开和关闭 文件读写函数.
File(檔案處理) 學習目標:開檔、讀檔、更新檔與關閉檔案.
THE C PROGRAMMING LANGUAGE
第10章 文件操作.
字符串和字符数组 字符串的输入和输出 字符串的基本操作
本章中將會更詳細地考慮有關重複的概念,並且會 介紹for和do…while等兩種用來控制重複的敘述 式。 也將會介紹switch多重選擇敘述式。 我們會討論直接和迅速離開某種控制敘述式的 break敘述式,以及用來跳過重複敘述式本體剩餘 部份的continue敘述式。 本章會討論用來組合控制條件的邏輯運算子,最後.
第10章 檔案與資料夾處理 10-1 C語言的檔案輸入與輸出 10-2 文字檔案的讀寫 10-3 二進位檔案的讀寫
ACM程序员大赛讲座 _____C语言程序设计要点 讲授人:王敬华.
Linux 文件操作——系统调用和标准 IO 库
第5章 文件.
第9章 文件操作 文件 使用文件的目的 操作系统管理数据的基本单位 存储在外存储器上的数据的集合
計數式重複敘述 for 迴圈 P
第十章 指针.
第5讲 结构化程序设计(Part II) 周水庚 2018年10月11日.
研讨课4 文件操作.
PHP5與MySQL4 入門學習指南 凱文瑞克 著 第 16 章 檔案處理.
|09 陣列.
一、文件的基本概念 第十三章 文 件 所谓“文件”是指一组相关数据的有序集合。 这个数据集有一
第7章 输入/输出流 文件和I/O流概述 标准I/O流的对象及其成员函数 文件流.
第3章 變數、算術運算、 數學函數及輸入輸出.
實習十 開讀檔練習.
Chap 5 函数 5.1 计算圆柱体积 5.2 使用函数编写程序 5.3 变量与函数.
C標準輸出入函數庫 與 作業系統.
輸出與輸入(I/O).
<编程达人入门课程> 本节内容 字符与字符串 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
File Input and Output Chap. 11: 施威銘的書 Chap. 7: K&R.
本节内容 文件读写 视频提供:昆山爱达人信息技术有限公司.
第二章 类型、对象、运算符和表达式.
第13章 文 件.
Introduction to the C Programming Language
C 程式設計— 檔案處理 台大資訊工程學系 資訊系統訓練班.
結構、檔案處理(Structure, File)
第七章 文件 7.1 文件的基本概念 7.2 文件类型指针 7.3 文件的打开与关闭 7.4 文件的读/写 7.5 文件的随机读/写
Introduction to the C Programming Language
C/C++基礎程式設計班 C語言入門、變數、基本處理與輸入輸出 講師:林業峻 CSIE, NTU 3/7, 2015.
C 程式設計— 字元與字串 台大資訊工程學系 資訊系統訓練班.
字串 第10章 part I 8/30/2019.
2018 Operating Systems 作業系統實習 助教:林欣穎 實驗室:720A Lab2.
C语言程序设计 第13章 文件操作.
陣列與檔案處理 授課:張朝麟 日期:2009/3/11.
台大資訊工程學系 資料系統訓練班 第119期 吳晉賢
Introduction to the C Programming Language
Presentation transcript:

C File System

檔案指標 C語言提供了許多檔案處理的函式 需要搭配一個資料型態為FILE的指標來使用 檔案指標指向一個含有檔案資訊的結構 包括資訊 緩衝區的位置 緩衡區內現在字元的位置 目前檔案正在被讀取、寫入或檔案結束

檔案指標 使用者不需知道檔案指標的細節,所有定義可由<stdio.h>獲得 FILE *fp; 就像printf()我們只需include而不需寫定義一樣 FILE *fp; fp是一個指標指向FILE FILE就像int只是一個型別名稱 在<stdio.h>中用typedef定義,而不是一個結構標籤

C函式庫中已經宣告好3個FILE *的指標,分別是stdin、stdout、stderr printf("...")事實上是呼叫fprintf( stdout, "....") scanf("...")事實上是呼叫fscanf( stdin, "..." ) fprintf( stderr, "....")所印在螢幕上的東西不會被輸出轉向所影響

檔案格式 C可以建立兩種格式的檔案 用途 文字檔案格式(text file) 二元檔案格式(binary file) 將資料轉換成字元的格式存入檔案 存放的東西都是可視的英文字母或數字符號等 二元檔案格式(binary file) 將數值的內容使用二進位方式直接存入檔案中 用途 文字檔格式通常用來列印報表,或是讀入人為製作的檔案 二元檔案處理速度快、佔的空間小

檔案處理流程

開啟與關閉檔案 fopen 開啟檔案 fclose 關閉檔案

fopen 程式中叫用的方法如: 第一個參數是字串,指出檔案名稱, 第二個參數是模式,也是一個字串 模式有r、w、a三種: fp = fopen(name, mode); 第一個參數是字串,指出檔案名稱, 第二個參數是模式,也是一個字串 模式有r、w、a三種: r :唯讀模式(read) w :寫入模式(write) a :增加模式(append),從檔案最後面繼續寫入資料 如果希望同時讀寫檔案,可以在模式字串後加上+ r+ , w+, a+

以二元模式開啟檔案 可以在模式字串加b 打開一個不存在的檔案來寫入或附加在檔案尾端 打開一個存在的檔案寫入時,舊的檔案內容會被刪除 rb:代表以唯讀模式即二元檔案格式開啟 打開一個不存在的檔案來寫入或附加在檔案尾端 檔案必須儘可能先被建立 打開一個存在的檔案寫入時,舊的檔案內容會被刪除 若是增加模式(a)就會保留它們,並寫入到檔案尾端 嘗試讀一個不存在的檔案會造成錯誤,或是讀取一個不被允許讀取的檔案也會產生錯誤 如有錯誤產生, fopen 會傳回NULL

fclose : 關閉該檔案 fclose(FILE *fp); 檔案不用時,需隨手關閉該檔案 關閉檔案時會強迫仍在電腦緩衝區的所有資料輸出到檔案裡

範例練習:製作及開啟檔案

範例練習:讀/寫檔案 寫入檔案 fprintf(FILE *p, ...) 除了前面加個檔案指標外,其餘與printf()一樣

讀取資料: fscanf() fscanf(FILE *p, ...) 除了前面加個檔案指標外,其餘與scanf()一樣 注意:通常fprintf()和fscanf()都是用來處理文字格式檔案

讀取二元檔: fread() fread(pointer to variable, item size, item number, FILE *fp) pointer to variable 是一個指向存放資料記憶體的指標 item size是資料型態的大小 item number是讀入的個數 fp是指向檔案的指標 從fp所指到的檔案讀一個整數(4 bytes)到num所指的記憶體 int num; fread(&num, sizeof(int), 1, fp); 從fp所指到的檔案讀一個字串(10 bytes)到str所指的記憶體 char str[10]; fread(str, sizeof(str), 1, fp);

寫入二元檔: fwrite() fwrite(pointer to variable, item size, item number, FILE *fp) 從num所指的位址寫一個整數(4 bytes)到fp所指的檔案之中 fwrite(&num, sizeof(int), 1, fp); 注意 通常fread()和fwrite()都是用來處理二元格式檔案

使用 fget fgetc(FILE *fp) 從fp所指的檔案讀入一個字元。 printf("We read a character %c from the file.\n", fgetc(fp)); fputc(int c, FILE *fp) 將字元c寫入fp所指的檔案。 scanf("%c",&ch); fputc(ch, fp);

使用 fput fgets(char *buffer, int max_char_num, FILE *fp) 從fp所指到的檔案讀入一個字串到buffer,最多只允許max_char_num-1個字元 與gets()不同的是,fgets()函式會保留換行字元 fputs(const char *str, FILE *fp) 將str這個字串的內容寫到fp所指的檔案裡面 與puts()不同的是,fputs()不會自動加上換行字元

其他檔案處理函數 feof(FILE *fp) 用來判斷檔案游標是否已經到了檔案的結尾 if(feof(fp)) printf("We reach the end-of-file.\n");

補充說明 寫法一 while(!feof(fin)){ fscanf(fin,”%s”,line); printf(“%s\n”,line); } 適用情況(結尾沒空白or換行) 不適用(結尾有空白or換行) 1 2 3 J A C EOF 1 2 3 J A C \n EOF

補充說明 寫法二 while(1){ fscanf(fin,”%s”,line); if(feof(fin))break; printf(“%s\n”,line); } 不適用情況(結尾沒空白or換行) 適用(結尾有空白or換行) 1 2 3 J A C EOF 1 2 3 J A C \n EOF ↓

其他檔案處理函數 ferror(FILE *fp) 用來判斷檔案讀寫是否出現問題 if(ferror(fp)) printf("We encounter file access error.\n"); rewind(FILE *fp) 將檔案游標重設到檔案的開頭,並將錯誤旗標(flag)重設

其他檔案處理函數 fseek(FILE *fp, how man bytes to move, where to start) SEEK_SET 表示從檔案開頭起算 SEEK_CUR 表示目前游標位置起算 SEEK_END 表示從檔案結尾起算 how many bytes 正值表示往檔案結尾移動,負值表示往開頭 fseek(fp,0,SEEK_SET); //跟rewind一樣移到檔案開頭 fseek(fp,1,SEEK_CUR); //檔案指標向後移動一個byte

檔案游標移動範例

檔案處理函數原型和回傳值 FILE fopen(const char *,const char *) 成功傳回檔案指標,失敗傳回NULL int fclose(FILE *) 成功傳回0,失敗傳回EOF int fprintf(FILE *, const char *, ...) 傳回寫出字元個數,失敗傳回EOF int fscanf(FILE *, const char *, ...) 傳回讀入字元個數,失敗傳回EOF int fread(void *, size_t, sizet, FILE *) 傳回讀入項目個數 int fwrite(void *, size_t, sizet, FILE *) 傳回寫出項目個數 int fseek(FILE *, int, int) 成功傳回0,失敗傳回非0值 void rewind(FILE *) int feof(FILE *) 已到檔尾傳回非零值,否則傳回0 int ferror(FILE *) 發生錯誤傳回非零值,否則傳回0 void perror(const char *)

強制終止檔案處理: exit() 被叫用時,程式終止執行 參數由程式自行設定 if( (fp=fopen(fname,"r")) == NULL ) { printf("The file doesn't exist.\n"); exit(0); } 參數由程式自行設定 一般來說傳入的值是 0 則通知執行成功 非零則表示有不正常的情況 exit會對每個打開的輸出檔案叫用 fclose,強迫清光任何一個緩衝區