1 / 30

第10章 檔案與資料夾處理

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

zuri
Download Presentation

第10章 檔案與資料夾處理

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第10章 檔案與資料夾處理 • 10-1 檔案的基礎 • 10-2 文字檔案的讀寫 • 10-3 二進位檔案的讀寫 • 10-4 檔案與資料夾處理

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

  3. 10-1 檔案的基礎-文字檔案(Text Files) • 文字檔案儲存的是字元資料,文字檔案視為一種「文字串流」(Text Stream),串流可以想像成水龍頭流出的是一個個字元,也就是說處理文字檔案只能向前一個個循序處理字元,也稱為「循序檔案」(Squential Files),如同水往低處流,並不能回頭處理之前處理過的字元。 • 文字檔案的處理就是讀取(Input)、寫入(Output)和新增(Append)三種方式,將字元資料寫入檔案與讀取文字檔案的內容。

  4. 10-1 檔案的基礎-二進位檔案(Binary Files) • 儲存在磁碟機的二進位(Binary)檔和文字檔案並沒有什麼不同,C語言標準函式庫存取的二進位檔是指沒有處理過的「位元組」(Bytes)資料,這種「二進位串流」(Binary Stream)的特性是寫入和讀出檔案的資料完全相同。 • 二進位檔案可以依需求以循序或「隨機存取」(Random Access)方式進行處理,隨機處理可以將檔案視為一個儲存在記憶體的陣列或結構陣列,只需移動「檔案指標」(File Pointer)到存取的位置,就可以存取資料,如同在陣列使用索引存取陣列元素。

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

  6. 10-2-1 開啟與關閉文字檔案-函數

  7. 10-2-1 開啟與關閉文字檔案-範例 • 在程式只需宣告FILE指標變數fp,就可以使用fopen()函數開啟檔案,如下所示: FILE *fp; fp = fopen("filename", "w"); • 函數的第1個參數是檔案名稱或檔案的完整路徑,第2個參數是檔案開啟模式字串,文字檔案支援的開啟模式。

  8. 10-2-1 開啟與關閉文字檔案-開啟模式

  9. 10-2-1 開啟與關閉文字檔案-檢查檔案是否開啟 • fopen()函數傳回NULL表示檔案開啟失敗,可以使用if條件檢查檔案指標,如下所示: if ( fp == NULL ) { printf("檔案開啟失敗....\n"); exit(1); } • 最後在執行完檔案操作後,請執行fclose()函數關閉檔案,如下所示: fclose(fp);

  10. 10-2-2 讀寫字串到文字檔案-函數

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

  12. 10-2-3 讀寫字元到文字檔案-函數

  13. 10-2-3 讀寫字元到文字檔案-範例 • 使用getc()函數讀取整個檔案內容,一樣可以配合while迴圈來讀取,如下所示: while ((c = getc(fp))!= EOF ) putchar(c); • while迴圈以一次一個字元的方式讀取檔案,直到getc()函數傳回EOF為止,也就是到達檔尾。

  14. 10-2-4 格式化讀寫文字檔案-函數

  15. 10-2-4 格式化讀寫文字檔案-範例 • 使用fscanf()函數配合while迴圈就可以讀取整個檔案的內容,如下所示: while ( fscanf(fp,"%s", line) != EOF ) printf("%s\n", line); • while迴圈以一次讀取一個格式字串的資料,以此例是字串,直到傳回EOF為止,也就是到達檔尾。

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

  17. 10-3 二進位檔案的讀寫-說明 • 二進位檔案讀寫除了可以使用文字檔案的循序方式存取,還可以使用隨機方式,以記錄為單位進行存取,能夠隨機存取任一筆記錄或更改指定記錄的資料。

  18. 10-3 二進位檔案的讀寫-開啟 • C語言的二進位檔案也是使用fopen()函數開啟和fclose()函數關閉檔案,只是使用不同的開啟模式字串,在程式宣告FILE指標變數fp後,就可以開啟指定的檔案,如下所示: FILE *fp; fp = fopen("filename", "wb"); • 函數開啟檔案filename,第2個參數的檔案開啟模式多了字元'b',表示開啟的是二進位檔案。

  19. 10-3 二進位檔案的讀寫-開啟模式

  20. 10-3-1 寫入記錄到二進位檔案-結構 • 隨機存取是以記錄為存取單位,在建立二進位檔案的隨機存取前,C程式需要宣告結構來儲存資料,例如:學生資料的record結構,如下所示: struct record { char name[20]; int age; float score; }; typedef struct record student;

  21. 10-3-1 寫入記錄到二進位檔案-函數

  22. 10-3-1 寫入記錄到二進位檔案-範例 • 以student結構為例,如下所示: student temp; ……… fwrite(&temp, sizeof(temp), 1, fp); • 程式碼建立結構變數temp,在指定成員變數的值後,呼叫fwrite()函數寫入此結構,&temp取得結構位址,sizeof運算子計算結構大小,以此例就是寫入一筆結構temp到檔案fp。

  23. 10-3-2 循序讀取檔案的記錄-函數

  24. 10-3-2 循序讀取檔案的記錄-使用 • 二進位檔案可能儲存多筆記錄,feof()函數是用來檢查是否讀到檔尾,在配合while迴圈後,就可以讀取檔案的所有記錄,如下所示: while ( !feof(fp) ) { } • while迴圈讀取檔案直到feof()函數傳回非零值,也就是到達檔尾。

  25. 10-3-3 隨機存取記錄資料-函數

  26. 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:從檔案結尾。

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

  28. 10-4-1 更改檔名與刪除檔案

  29. 10-4-2 建立、刪除和切換目錄

  30. 10-4-3 複製檔案 • C語言的標準函式庫並沒有提供複製檔案的函數,不過只需使用本章前說明的檔案讀寫函數,在開啟2個檔案指標sfp和dfp後,使用while迴圈就可以複製檔案內容,如下所示: while ( (c = getc(sfp)) != EOF ) putc(c, dfp);

More Related