首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C 語言專案實戰:三層架構下的資料檔案讀寫完整範例

     編輯:程式設計綜合問答

專案架構概覽

採用簡易三層架構:

  • UI 層:各功能選單函式(LoginUI、MainUI、AddBookUI 等),回傳 int 代表下一個介面編號。
  • 邏輯層:main() 透過 switch 根據介面編號跳轉,實現介面流程控制。
  • 資料層:使用 C 標準庫 FILE* 進行二進位/文字檔的讀寫。

檔案寫入範例(覆寫模式)

FILE *pFile = fopen("data.dat", "wb"); // 二進位寫入,若檔案存在則截斷
if (pFile) {
    const char *msg = "Hello File";
    fwrite(msg, 1, strlen(msg), pFile); // 寫入位元組陣列
    fflush(pFile); // 強制刷新緩衝區,確保資料落盤
    fclose(pFile);
}

檔案讀取範例(一次讀完整檔案)

FILE *pFile = fopen("data.dat", "rb");
if (pFile) {
    fseek(pFile, 0, SEEK_END);       // 移至檔案尾
    long len = ftell(pFile);         // 取得檔案大小
    rewind(pFile);                   // 回到檔案頭

    char *buffer = (char*)malloc(len + 1);
    fread(buffer, 1, len, pFile);    // 一次讀入
    buffer[len] = '\0';              // 手動加結尾符

    printf("檔案內容:%s\n", buffer);
    free(buffer);
    fclose(pFile);
}

關鍵函式說明

函式用途
fopen開啟檔案,模式 wb/rb 避免換行轉換
fwrite/fread二進位區塊讀寫,適合結構體陣列
fflush刷新輸出緩衝區,不關閉檔案即可更新磁碟
fseek/ftell/rewind隨機存取與取得檔案長度
fclose關閉檔案,釋放資源,確保資料寫入

進階建議

  • 定義固定長度的結構體,配合 fwrite(&struct, sizeof(struct), count, fp) 直接序列化/反序列化。
  • 錯誤處理:每次檔案操作後檢查 ferror(fp) 或 feof(fp)。
  • 大型資料考慮分塊讀寫或使用 SQLite 等嵌入式資料庫替代平檔。

總結

掌握 FILE* 核心 API、二進位模式與緩衝區控制,即可在 C 專案中實作穩健的資料持久化層。搭配簡易選單驅動架構,快速構建完整的控制台應用程式。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved