C語言學習之文件操作

? ? ? ? 經過前面的學習,我們已經基本掌握了如何去寫一個C語言的代碼了。但是在實際的項目中,我們不可能不需要文件去操作。因為如果沒有文件,我們寫的程序是存儲在電腦的內存中的。如果程序推出,內存回收數據就隨之丟失了。如果我們要對數據進行永久性的保存,我們就需要使用文件。

? ? ? ? 接下來我們就文件的操作進行學習

目錄

什么是文件

? ? ? 程序文件

? ? ? 數據文件???

? ? ? ? 文件名

二進制文件和文本文件

科普:絕對路徑和相對路徑:

1. 絕對路徑

2. 相對路徑

3. 關鍵區別對比

4. 實際編程注意事項

5. 示例場景

文件的打開與關閉

? ? ? ? 流和標準流

? ? ? ? 流

? ? ? ? 標準流

? ? ? ? 文件指針

? ? ? ? 文件的打開與關閉?

? ? ? ? 文件的順序讀寫

對比兩組函數scanf/fscanf/sscanf和printf/fprintf/sprintf

對比表格

1. 功能與數據流方向

3. 安全性問題

2. 參數差異

4. 典型應用場景

5.典型應用場景

文件的隨機讀寫

? ? ? ? fseek函數

? ? ? ? ftell函數

? ? ? ? rewind函數

? ?文件讀取結束的判定

? ? ? ? 錯誤使用的feof? ? ?

? ? ? ? 文件緩沖區


什么是文件

? ? ? ? 文件是磁盤(磁盤)的文件

? ? ? ? 但是在程序設計上,我們一般談及的文件分為兩種:程序文件、數據文件(文件功能角度來區分)。

? ? ? 程序文件

? ? ? ? 程序文件包括程序文件(后綴為.c),目標文件(Windows環境下后綴為.obj),可執行程序(Windows環境下后綴為.exe)

? ? ? 數據文件???

? ? ? ? 文件內容不一定是程序,而是程序運行時讀寫的數據,如程序運行時需要從中讀取數據的文件,或者輸出內容的文件
????????本篇中討論的是數據?件。

????????在之前的學習中所處理數據的輸?輸出都是以終端為對象的,即從終端的鍵盤輸?數據,運?結果顯?到顯?器上。其實有時候我們會把信息輸出到磁盤上,當需要的時候再從磁盤上把數據讀取到內存中使?,這?處理的就是磁盤上?件。

? ? ? ? 文件名

? ? ? ? 一個文件要有唯一的標識,以便于用戶識別和引用

? ? ? ? 文件名包含三部分:文件路徑+文件名主干+文件后綴

? ? ? ? 如:D:\VS2022\c-language-practice\test.c

? ? ? ? 為了方便起見,文件標識就是文件名

二進制文件和文本文件

????????根據數據的組織形式,數據?件被稱為?本?件和?進制?件。

????????數據在內存中以?進制的形式存儲,如果不加轉換的輸出到外存的?件中,就是?進制?件。

????????如果要求在外存上以ASCII碼的形式存儲,則需要在存儲前轉換。以ASCII字符的形式存儲的?件就是?本?件。

?????????個數據在?件中是怎么存儲的呢?

????????字符?律以ASCII形式存儲數值型數據既可以?ASCII形式存儲,也可以使??進制形式存儲。如有整數10000,如果以ASCII碼的形式輸出到磁盤,則磁盤中占?5個字節(每個字符?個字節),??進制形式輸出,則在磁盤上只占4個字節。

? ? ? ? 測試代碼:

#include<stdio.h>
int main()
{int a = 100;FILE* fp = fopen("test.txt", "wb");fwrite(&a,4,1,fp);//二進制寫入文件中fclose(fp);fp = NULL;return 0;
}

運行之后是這個樣子,也就是什么都沒有

通過這里打開可以發現

? ? ? ??

生成了一個txt的文本文件

?這個文件在VS內是無法打開的

? ? ? ? 但是我們可以在VS中打開它(雖然實際意義不是很大)

顯示結果為:

科普:絕對路徑和相對路徑:

1. 絕對路徑

定義

根目錄開始的完整路徑,明確指向文件或目錄的位置。

  • Windows示例C:\\Users\\Name\\Documents\\file.txt

  • Linux/macOS示例/home/name/Documents/file.txt

特點

FILE* fp = fopen("data/input.csv", "r");  // 當前目錄下的data子目錄
// 或
FILE* fp = fopen("../logs/error.log", "w"); // 上級目錄的logs子目錄

2. 相對路徑

定義

相對于程序當前工作目錄的路徑,不包含根目錄。

  • 示例

    • data/file.txt:當前目錄下的data子目錄中的文件。

    • ../config/settings.ini:上級目錄的config子目錄中的文件。

特點

  • 靈活性:路徑隨程序的工作目錄變化而變化。

  • 簡潔性:路徑較短,便于維護。

  • 符號說明

    • .:當前目錄(可省略)。

    • ..:上級目錄。

C語言中的使用

FILE* fp = fopen("data/input.csv", "r");  // 當前目錄下的data子目錄
// 或
FILE* fp = fopen("../logs/error.log", "w"); // 上級目錄的logs子目錄

適用場景

  • 項目內部資源文件(如配置文件、數據文件)。

  • 需要跨平臺移植的代碼。

缺點

  • 依賴工作目錄:若程序運行時工作目錄改變,路徑可能失效。

  • 調試困難:路徑錯誤可能導致文件找不到,需檢查當前目錄。

3. 關鍵區別對比

對比項絕對路徑相對路徑
路徑起點根目錄(如?C:\\?或?/程序當前工作目錄
唯一性唯一確定文件位置隨工作目錄變化
可移植性低(依賴系統目錄結構)高(路徑與項目結構相關)
典型使用場景系統級文件訪問(如日志、全局配置)項目內部資源訪問(如數據文件、模塊配置)
路徑長度
安全性可能暴露敏感路徑更安全(隱藏具體系統路徑)

4. 實際編程注意事項

(1) 路徑分隔符

  • Windows:默認使用反斜杠?\,但在C字符串中需轉義為?\\,或統一使用正斜杠?/(兼容)。

  • Linux/macOS:使用正斜杠?/

  • 跨平臺寫法

    // 統一使用正斜杠
    FILE* fp = fopen("data/files/image.png", "rb");

    (2) 獲取當前工作目錄

  • C標準庫函數getcwd(需包含?<unistd.h>?或?<direct.h>)。

    #include <unistd.h>
    char cwd[256];
    getcwd(cwd, sizeof(cwd)); // 獲取當前工作目錄
    printf("當前目錄:%s\n", cwd);

    (3) 路徑拼接

  • 手動拼接(不推薦):

    char path[256];
    snprintf(path, sizeof(path), "%s/%s", base_dir, filename);
  • 使用庫函數(推薦):

    • C17引入的?std::filesystem(C++),但C語言需依賴平臺API(如Windows的?PathCombine)。

(4) 錯誤處理

  • 檢查文件是否成功打開

FILE* fp = fopen("data.txt", "r");
if (fp == NULL) {perror("文件打開失敗"); // 輸出:文件打開失敗: No such file or directoryreturn 1;
}

5. 示例場景

場景1:讀取項目內的配置文件

  • 相對路徑config/settings.ini

    FILE* fp = fopen("config/settings.ini", "r");

    場景2:寫入系統日志文件

  • 絕對路徑(Linux):

    FILE* fp = fopen("/var/log/myapp/error.log", "a");

    總結

  • 絕對路徑:精準但不可移植,適合訪問系統級固定文件。

  • 相對路徑:靈活且可移植,適合項目內部資源管理。

  • 編程建議:優先使用相對路徑,結合環境變量或配置文件動態設置路徑,提升代碼可維護性和跨平臺能力。

    文件的打開與關閉

    ? ? ? ? 流和標準流

    ? ? ? ? 流

    ????????我們程序的數據需要輸出到各種外部設備,也需要從外部設備獲取數據,不同的外部設備的輸?輸出操作各不相同,為了?便程序員對各種設備進??便的操作,我們抽象出了流的概念,我們可以把流想象成流淌著字符的河。

    ????????C程序針對?件、畫?、鍵盤等的數據輸?輸出操作都是通過流操作的。

    ?????????般情況下,我們要想向流?寫數據,或者從流中讀取數據,都是要打開流,然后操作。

    ? ? ? ? 標準流

    ????????那為什么我們從鍵盤輸?數據,向屏幕上輸出數據,并沒有打開流呢?那是因為C語?程序在啟動的時候,默認打開了3個流:

    ? stdin - 標準輸?流,在?多數的環境中從鍵盤輸?,scanf函數就是從標準輸?流中讀取數據。

    ? stdout - 標準輸出流,?多數的環境中輸出?顯?器界?,printf函數就是將信息輸出到標準輸出流中。

    ? stderr - 標準錯誤流,?多數環境中輸出到顯?器界?。

    ????????這是默認打開了這三個流,我們使?scanf、printf等函數就可以直接進?輸?輸出操作的。stdin、stdout、stderr 三個流的類型是: FILE * ,通常稱為?件指針。

    ????????C語?中,就是通過 FILE* 的?件指針來維護流的各種操作的。

    ? ? ? ? 那么什么是文件指針呢,接下來我們來學習以下

    ? ? ? ? 文件指針

    ????????緩沖?件系統中,關鍵的概念是“?件類型指針”,簡稱“?件指針”。

    ????????每個被使?的?件都在內存中開辟了?個相應的?件信息區,?來存放?件的相關信息(如?件的名字,?件狀態及?件當前的位置等)。這些信息是保存在?個結構體變量中的。該結構體類型是由系統聲明的,取名 FILE.

    ? ? ? ? 不同C編譯器的FILE類型包含的內容不完全相同,但是大同小異

    ? ? ? ??每當打開?個?件的時候,系統會根據?件的情況?動創建?個FILE結構的變量,并填充其中的信息,使?者不必關?細節。

    ?????????般都是通過?個FILE的指針來維護這個FILE結構的變量,這樣使?起來更加?便。

    ????????下?我們可以創建?個FILE*的指針變量

    FILE *pf;//文件指針變量

    ????????定義pf是?個指向FILE類型數據的指針變量。可以使pf指向某個?件的?件信息區(是?個結構體變量)。通過該?件信息區中的信息就能夠訪問該?件。也就是說,通過?件指針變量能夠間接找到與它關聯的?件

    ?????????如:

    ? ? ? ? 文件的打開與關閉?

    ?????????件在讀寫之前應該先打開?件,在使?結束之后應該關閉?件

    ????????在編寫程序的時候,在打開?件的同時,都會返回?個FILE*的指針變量指向該?件,也相當于建?了指針和?件的關系。

    ????????ANSI C 規定使? fopen 函數來打開?件, fclose函數 來關閉?件。

    //打開文件
    FILE*fopen(const char *filename,const char*mode);
    //關閉文件
    FILE*fclose(FILE*stream);

    ? ? ? ? mode表示文件打開模式,下面的是所有的文件打開模式

    文件打開模式含義文件不存在時的行為
    "r"只讀模式打開文本文件返回NULL,打開失敗
    "rb"只讀模式打開二進制文件返回NULL,打開失敗
    "w"寫入模式打開文本文件,清空文件內容(若存在)創建新文件
    "wb"寫入模式打開二進制文件,清空文件內容(若存在)創建新文件
    "a"追加模式打開文本文件,寫入從文件末尾開始創建新文件
    "ab"追加模式打開二進制文件,寫入從文件末尾開始創建新文件
    "r+"讀寫模式打開文本文件(文件必須存在)返回NULL,打開失敗
    "rb+"?/?"r+b"讀寫模式打開二進制文件(文件必須存在)返回NULL,打開失敗
    "w+"讀寫模式打開文本文件,清空文件內容(若存在)創建新文件
    "wb+"?/?"w+b"讀寫模式打開二進制文件,清空文件內容(若存在)創建新文件
    "a+"讀寫模式打開文本文件,寫入從文件末尾開始,讀取從頭開始創建新文件
    "ab+"?/?"a+b"讀寫模式打開二進制文件,寫入從文件末尾開始,讀取從頭開始創建新文件
    "wx"?(C11)獨占寫入模式打開文本文件(若文件存在則失敗)創建新文件(若存在則失敗,返回NULL
    "wbx"?(C11)獨占寫入模式打開二進制文件(若文件存在則失敗)創建新文件(若存在則失敗,返回NULL

    ? ? ? ? 舉例說明:

    #include<stdio.h>
    int main()
    {//fopen()函數用于打開文件,返回一個FILE*指針// 如果成功打開文件,則返回文件信息區的指針// 如果打開失敗,則返回NULL。FILE* fp=fopen("D:\\VS2022\\c-language-practice\\文件操作學習\\test.txt","r");if(fp==NULL){perror("fopen");return 1;}else{printf("文件打開成功\n");}return 0;
    }

    ? ? ? ? 文件的順序讀寫

    ? ? ? ? 順序讀寫函數的介紹

    函數名功能適用場景
    fgetc從文件流中讀取一個字符逐個字符讀取文本文件(如解析配置文件、簡單文本處理)
    fputc向文件流中寫入一個字符逐個字符寫入文本文件(如生成日志、構建文本內容)
    fgets從文件流中讀取一行或指定長度的字符串(包含換行符,自動添加\0按行讀取文本文件(如讀取CSV、配置文件)
    fputs向文件流中寫入一個字符串(不自動添加換行符)寫入字符串到文本文件(如保存用戶輸入、導出數據)
    fscanf從文件流中按格式讀取數據(類比?scanf讀取結構化文本數據(如讀取"Name: %s, Age: %d"?格式的記錄)
    fprintf向文件流中按格式寫入數據(類比?printf寫入結構化文本數據(如生成格式化日志、保存表格數據)
    fread從文件流中讀取二進制數據塊(按字節數和項數)讀取二進制結構體或數組(如加載圖片、音視頻文件或程序狀態快照)
    fwrite向文件流中寫入二進制數據塊(按字節數和項數)寫入二進制結構體或數組(如保存游戲進度、序列化數據)
    getc與?fgetc?功能相同,但可能通過宏實現(性能略高)同?fgetc,常用于高頻字符讀取場景
    putc與?fputc?功能相同,但可能通過宏實現(性能略高)同?fputc,常用于高頻字符寫入場景
    ungetc將字符退回輸入流,使下次讀取可重新獲取該字符解析需要“向前看”的場景(如詞法分析器中回退字符)

    ????????上?說的適?于所有輸?流?般指適?于標準輸?流和其他輸?流(如?件輸?流);所有輸出流?般指適?于標準輸出流和其他輸出流(如?件輸出流)。

    關鍵說明

    1. 文本模式 vs 二進制模式

      • 文本模式函數(fgetcfputs等)會自動處理換行符轉換(如Windows的\r\n???\n)。

      • 二進制模式函數(freadfwrite)直接操作原始字節,無格式轉換。

    2. 順序讀寫特性

      • 所有函數按文件指針順序操作,每次讀寫后指針自動后移。

      • 與隨機訪問函數(fseekftell)互補,不可混用。

    3. 典型應用場景

      • 文本處理fgets?+?fputs(逐行讀寫),fscanf?+?fprintf(格式化數據)。

      • 二進制處理fread?+?fwrite(結構體/數組持久化)。

      • 低層操作fgetc?+?fputc(自定義解析或生成。

    舉例說明:寫入一個字符

    fputc函數的結構:

    #include<stdio.h>
    int main()
    {FILE* fp=fopen("test.txt","w");if(fp==NULL){perror("fopen");return 1;}//寫文件fputc('a', fp);fputc('b', fp);fputc('c', fp);fputc('d', fp);fputc('e', fp);fputc('f', fp);fputc('g', fp);fputc('h', fp);fputc('i', fp);fputc('j', fp);fputc('k', fp);//關閉文件fclose(fp);fp = NULL;return 0;
    }

    ?代碼為0 ,代表運行成功

    成果展示:

    讀字符

    #include<stdio.h>
    int main()
    {FILE* fp=fopen("test.txt","r");if(fp==NULL){perror("fopen");return 1;}//寫文件fputc('a', fp);fputc('b', fp);fputc('c', fp);fputc('d', fp);fputc('e', fp);fputc('f', fp);fputc('g', fp);fputc('h', fp);fputc('i', fp);fputc('j', fp);fputc('k', fp);//讀文件int ch;while((ch=fgetc(fp))!=EOF){printf("%c ", ch);}//關閉文件fclose(fp);fp = NULL;return 0;
    }

    對比兩組函數scanf/fscanf/sscanf和printf/fprintf/sprintf

    對比表格

    對比項scanf?系列 (scanf/fscanf/sscanf)printf?系列 (printf/fprintf/sprintf)
    核心功能從輸入源按格式解析數據并存儲到變量。將數據按格式格式化輸出到目標輸出源。
    函數分類scanf:標準輸入(鍵盤)
    fscanf:文件流
    sscanf:字符串
    printf:標準輸出(屏幕)
    fprintf:文件流
    sprintf:字符串
    參數順序scanf(format, &var1, &var2...)
    fscanf(stream, format, &var...)
    printf(format, val1, val2...)
    fprintf(stream, format, val...)
    輸入/輸出源輸入源:鍵盤(stdin)、文件、字符串輸出目標:屏幕(stdout)、文件、字符串
    返回值返回成功解析的項數(失敗返回EOF返回成功輸出的字符數(失敗返回負值)
    安全性風險緩沖區溢出(如%s無長度限制)sprintf存在緩沖區溢出風險,建議用snprintf
    典型應用場景讀取用戶輸入、解析文件數據、提取字符串中的結構化信息打印日志、生成格式化字符串、寫入文件數據

    詳細對比說明

    1. 功能與數據流方向

    3. 安全性問題

    • scanf系列

      • 從輸入源(鍵盤、文件、字符串)讀取數據,按格式解析后存入變量。

    • 示例

      int age;
      char name[32];
      sscanf("Name: Alice, Age: 25", "Name: %s, Age: %d", name, &age);

      printf系列

    • 將數據按格式轉換為字符串,輸出到目標(屏幕、文件、字符串)。

    • 示例

      char buffer[100];
      sprintf(buffer, "Result: %d", 42); // 輸出到字符串

      2. 參數差異

    • scanf系列

      • scanf:直接從?stdin?讀取,無需指定輸入源。

      • fscanf:需傳入文件指針(如?FILE* fp)。

      • sscanf:需傳入源字符串。

      • 變量參數:必須傳遞變量的地址(如?&num)。

    • printf系列

      • printf:直接輸出到?stdout

      • fprintf:需傳入文件指針。

      • sprintf:需傳入目標字符數組。

      • 變量參數:直接傳遞變量值(非指針)。

    • scanf系列

      • %s?和?%[?格式符可能導致緩沖區溢出。

      • 改進方法:指定最大寬度(如?%31s?限制長度為31字符)。

    • printf系列

      • sprintf?可能因目標緩沖區過小導致溢出。

      • 改進方法:使用?snprintf?限制寫入長度。

    char buf[10];
    snprintf(buf, sizeof(buf), "%s", "Too long string"); // 安全截斷

    4. 典型應用場景

    函數應用場景
    scanf交互式程序讀取用戶輸入(需配合輸入驗證)
    fscanf讀取配置文件、日志文件等結構化文本文件
    sscanf解析字符串中的數字或字段(如解析HTTP響應頭)
    printf輸出調試信息、程序運行結果到控制臺
    fprintf寫入日志文件、生成報告文件
    sprintf動態生成格式化字符串(需注意緩沖區大小,優先用?snprintf

    5.典型應用場景

    ?輸入函數組

    // 從鍵盤讀取輸入
    int num;
    scanf("%d", &num); // 從文件讀取
    FILE* fp = fopen("data.txt", "r");
    fscanf(fp, "Value: %d", &num);// 從字符串解析
    char str[] = "2023-10-01";
    int year, month, day;
    sscanf(str, "%d-%d-%d", &year, &month, &day);

    輸出字符組

    // 輸出到屏幕
    printf("Result: %d\n", 42);// 輸出到文件
    FILE* fp = fopen("log.txt", "w");
    fprintf(fp, "Error: %s\n", "File not found");// 輸出到字符串
    char buffer[64];
    sprintf(buffer, "Date: %04d-%02d-%02d", year, month, day);

    文件的隨機讀寫

    ? ? ? ? fseek函數

    ? ? ? ? 根據文件指針的位置和偏移量來定位文件的指針(文件內容的光標)

    int fseek(FILE*stream,long int offset,int origin);

    ? ? ? ? 例子:

    #include<stdio.h>
    int main()
    {FILE* pfile;pfile = fopen("test.txt", "wb");fputs("Hello, world!", pfile);fseek(pfile,9,SEEK_SET);fputs("  IM THE WORLD", pfile);fclose(pfile);return 0;
    }

    ? ? ? ? 結果:

    ? ? ? ? ftell函數

    ? ? ? ? 返回文件指針相對起始位置的偏移量

    #include<stdio.h>
    int main()
    {FILE* pfile;long size;pfile = fopen("test.txt", "rb");if (pfile == NULL){perror("打開失敗");return 1;}else{fseek(pfile, 0, SEEK_END);size=ftell(pfile);fclose(pfile);printf("文件大小為:%ld\n", size);}return 0;
    }

    ? ? ? ? rewind函數

    ? ? ? ? 讓文件指針回到文件的起始位置

    void rewind (FILE*stream);

    #include<stdio.h>
    int main()
    {int n;FILE* pfile;char str[27];pfile = fopen("test.txt", "w+");for (n='A';n<= 'Z';n++){fputc(n,pfile);}rewind(pfile);fread(str, 1, 26, pfile);fclose(pfile);str[26] = '\0';printf("%s\n", str);return 0;
    }

    結果為:?

    ? ?文件讀取結束的判定

    ? ? ? ? 錯誤使用的feof? ? ?

    ????????牢記:在?件讀取過程中,不能? feof 函數的返回值直接來判斷?件的是否結束。feof 的作?是:當?件讀取結束的時候,判斷讀取結束的原因是否是:遇到?件尾結束。

    ????????1. ?本?件讀取是否結束,判斷返回值是否為 EOF ( fgetc ),或者 NULL ( fgets )例如:? fgetc 判斷是否為 EOF .? fgets 判斷返回值是否為 NULL .

    ????????2. ?進制?件的讀取結束判斷,判斷返回值是否?于實際要讀的個數。例如:? fread判斷返回值是否?于實際要讀的個數。

    ? ? ? ? 文本文件的例子:

    #include<stdio.h>
    #include<stdlib.h>
    int main()
    {int c;//要處理EOF,必須為int型變量FILE* pfile=fopen("test.txt", "r");if (!pfile){perror("打開失敗");return 1;}//輸入失敗的時候會返回EOFwhile ((c = fgetc(pfile)) != EOF){putchar(c);}//判斷原因if (ferror(pfile)){puts("讀取失敗");}else if(feof(pfile)){puts("文件結束");}fclose(pfile);return 0;
    }

    ? ? ? ? 二進制文件的例子:

    #include<stdio.h>
    enum {SIZE=5};
    int main()
    {double a[SIZE] = {1.1, 2.2, 3.3, 4.4, 5.5};FILE* pfile = fopen("test.txt", "wb");//以二進制方式打開文件fwrite(a, sizeof(double), SIZE, pfile);//將數組a寫入文件fclose(pfile);//關閉文件double b[SIZE];pfile =fopen("test.txt", "rb");//以二進制方式打開文件size_t ret_code = fread(b, sizeof(double), SIZE, pfile);//從文件中讀取數組bif (ret_code==SIZE){puts("數組讀取內容為:");for (int n = 0;n < SIZE;n++){printf("%.2f ",b[n]);}putchar('\n');}else{if (feof(pfile)){puts("文件讀取結束");}else if (ferror(pfile)){puts("文件讀取失敗");}}fclose(pfile);//關閉文件return 0;
    }

    ? ? ? ? 文件緩沖區

    ????????ANSI C 標準采?“緩沖?件系統” 處理數據?件的,所謂緩沖?件系統是指系統?動地在內存中為程序中每?個正在使?的?件開辟?塊“?件緩沖區”。從內存向磁盤輸出數據會先送到內存中的緩沖區,裝滿緩沖區后才?起送到磁盤上。如果從磁盤向計算機讀?數據,則從磁盤?件中讀取數據輸?到內存緩沖區(充滿緩沖區),然后再從緩沖區逐個地將數據送到程序數據區(程序變量等)。緩沖區的??根據C編譯系統決定的。

    ????????

    ????????這?可以得出?個結論:因為有緩沖區的存在,C語?在操作?件的時候,需要做刷新緩沖區或者在?件操作結束的時候關閉?件。如果不做,可能導致讀寫?件的問題。?

    ? ? ? ? 以上就是本期C語言的內容了,希望各位讀者朋友點個贊,謝謝

    本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
    如若轉載,請注明出處:http://www.pswp.cn/web/79833.shtml
    繁體地址,請注明出處:http://hk.pswp.cn/web/79833.shtml
    英文地址,請注明出處:http://en.pswp.cn/web/79833.shtml

    如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

    相關文章

    2025年PMP 學習十三 第9章 項目資源管理(9.1,9.2)

    2025年PMP 學習十三 第9章 項目資源管理&#xff08;9.1,9.2&#xff09; 序號過程過程組9.1規劃資源管理規劃9.2估算活動資源規劃9.3獲取資源執行9.4建設團隊執行9.5管理團隊執行9.6控制資源監控 文章目錄 2025年PMP 學習十三 第9章 項目資源管理&#xff08;9.1,9.2&#xf…

    藍橋杯13屆國B 完全日期

    題目描述。 如果一個日期中年月日的各位數字之和是完全平方數&#xff0c;則稱為一個完全日期。 例如&#xff1a;2021 年 6 月 5 日的各位數字之和為 20216516&#xff0c;而 16 是一個完全平方數&#xff0c;它是 4 的平方。所以 2021 年 6 月 5 日是一個完全日期。 例如&…

    某某霸翻譯逆向分析[JS逆向]

    聲明 本文章中所有內容僅供學習交流使用&#xff0c;不用于其他任何目的&#xff0c;不提供完整代碼&#xff0c;抓包內容、敏感網址、數據接口等均已做脫敏處理&#xff0c;嚴禁用于商業用途和非法用途&#xff0c;否則由此產生的一切后果均與作者無關&#xff01; 本文章未經…

    開源Heygem本地跑AI數字人視頻教程

    圖文教程&#xff1a; 點擊跳轉 視頻教程 資料包下載 點擊下載&#xff1a;

    C++之fmt庫介紹和使用(1)

    C之fmt庫介紹與使用(1) Author: Once Day Date: 2025年5月12日 一位熱衷于Linux學習和開發的菜鳥&#xff0c;試圖譜寫一場冒險之旅&#xff0c;也許終點只是一場白日夢… 漫漫長路&#xff0c;有人對你微笑過嘛… 全系列文章可參考專欄: 源碼分析_Once-Day的博客-CSDN博客 …

    設計模式(9)——創建型模式之工廠方法

    設計模式(9)——創建型模式之工廠方法 工廠方法作用結構偽代碼適用場景工廠方法 作用 工廠方法是一種創建型設計模式,其在父類中提供一個創建對象的方法,允許子類決定實例化對象的類型。 結構 產品(Product)將會對接口進行聲明。對于所有由創建者及其子類構建的對象,…

    Docker 疑難雜癥解決指南:從入門到進階的全面剖析

    Docker 作為容器化技術的代表&#xff0c;憑借其輕量級、可移植性和高效資源利用率&#xff0c;已成為開發、測試和部署應用的標準工具。然而&#xff0c;在實際使用中&#xff0c;用戶常常會遇到鏡像構建失敗、容器啟動異常、網絡配置問題等疑難雜癥。本文將從鏡像構建、容器生…

    搶跑「中央計算+區域控制」市場,芯馳科技高端智控MCU“芯”升級

    伴隨著整車EE架構的加速變革&#xff0c;中國高端車規MCU正在迎來“新格局”。 在4月23日開幕的上海國際車展期間&#xff0c;芯馳科技面向新一代AI座艙推出了X10系列芯片&#xff0c;以及面向區域控制器、電驅和動力域控、高階輔助駕駛和艙駕融合系統等的高端智控MCU產品E3系…

    DeepPrep:深度學習提升神經影像預處理

    DeepPrep&#xff1a;深度學習提升神經影像預處理 一、DeepPrep介紹和BIDS格式介紹 神經影像預處理的痛點&#xff1a;傳統工具&#xff08;如fMRIPrep&#xff09;在大規模數據處理時效率低下&#xff0c;臨床樣本魯棒性不足。DeepPrep通過深度學習工作流管理實現突破&#…

    pytorch 數據預處理和常用工具

    文章目錄 NumPyNumpy數據結構安裝和使用NumPy Matplotlib的安裝和導入安裝和導入Matplotlib繪制基礎圖畫折線圖散點圖柱狀圖圖例 數據清洗據清洗的作用Pandas進行數據清洗Pandas數據結構Series 數據結構DataFrame數據結構 Pandas數據清洗常用代碼 特征工程主成分分析線性判別分…

    MATLAB 中常用的微分函數介紹

    MATLAB 中常用的微分函數介紹 在 MATLAB 中&#xff0c;微分運算是數值計算和符號計算中常用的功能。無論是在進行數據分析、優化算法&#xff0c;還是數學建模時&#xff0c;微分都扮演著重要的角色。本文將介紹 MATLAB 中常用的微分函數&#xff0c;并通過簡單的示例幫助大家…

    按指定位置或關鍵字批量刪除工作表-Excel易用寶

    在一個工作簿中有多個工作表&#xff0c;有些工作表不需要了&#xff0c;如果一個一個手動刪除&#xff0c;那實在是太慢了&#xff0c;有沒有什么好的方法可以批量刪除工作表。 批量刪除工作表很簡單&#xff0c;單擊【易用寶】→【工作表】→【批量刪除工作表】。 在打開的批…

    TypeScript裝飾器:從入門到精通

    TypeScript裝飾器&#xff1a;從入門到精通 什么是裝飾器&#xff1f; 裝飾器&#xff08;Decorator&#xff09;是TypeScript中一個非常酷的特性&#xff0c;它允許我們在不修改原有代碼的情況下&#xff0c;給類、方法、屬性等添加額外的功能。想象一下裝飾器就像給你的代碼…

    【SSL證書系列】客戶端如何檢查中間CA簽名是否由根CA簽發

    客戶端通過以下步驟檢查中間CA的簽名是否由受信任的根CA簽發&#xff1a; 1. 證書鏈的構建 服務器發送的證書鏈通常包含&#xff1a; ? 服務器證書&#xff08;由中間CA簽發&#xff09; ? 中間CA證書&#xff08;由根CA簽發&#xff09; ? 根CA證書&#xff08;通常不發送…

    【android bluetooth 協議分析 12】【A2DP詳解 1】【車機側藍牙音樂免切源介紹】

    “車機藍牙音樂免切源” 是近年來車載系統&#xff08;IVI&#xff0c;In-Vehicle Infotainment&#xff09;中常見的一個用戶體驗優化功能。它主要是為了簡化藍牙音樂播放流程、減少用戶操作&#xff0c;提升使用便捷性。 一、什么是“切源”&#xff1f; 在車機系統中&#…

    Android usb網絡共享詳解

    Android usb網絡共享詳解 文章目錄 Android usb網絡共享詳解一、前言二、USB網絡共享使用的前提1、Android設備支持adb 并且打開usb開關2、原生Settings能看到USB網絡共享開關3、代碼中檢測USB網絡共享是否支持 三、Settings 中USB網絡共享代碼的部分代碼1、Settings\res\xml\t…

    Step1

    項目 SchedulerSim 已搭建完成 ? ? ? 你現在擁有的&#xff1a; ? &#x1f527; 兩種調度器&#xff08;Round Robin SJF&#xff09; ? &#x1f4e6; 模擬進程類 Process ? &#x1f9f1; 清晰結構&#xff1a;OOP 風格 便于擴展 ? ?? 主函數已演示調度器運行效…

    初探 Skynet:輕量級分布式游戲服務器框架實戰

    在游戲服務器開發領域&#xff0c;高效、穩定且易于擴展的框架一直是開發者追求的目標。Skynet 作為一款輕量級、高性能的分布式游戲服務器框架&#xff0c;憑借其獨特的設計理念和強大的功能&#xff0c;贏得了眾多開發者的青睞 一.Skynet底層架構支持 1.Actor erlang 從語言…

    Oracle數據庫中,WITH..AS 子句用法解析

    前言 在Oracle數據庫中&#xff0c;WITH子句&#xff08;也成為“子查詢因子化” 或“公共表表達式”&#xff0c;Common Table Expression, CTE)用于定義一個臨時命名的結果集&#xff0c;這個結果集可以在后續的查詢中引用。 一、基本語法 WITH sjtab AS &#xff08;SELE…

    什么是衛星電話?衛星電話與普通電話有什么區別?

    在信息時代&#xff0c;通信技術已滲透到人類生活的方方面面&#xff0c;但傳統地面通信網絡仍存在盲區&#xff0c;無論是海洋、沙漠、高山&#xff0c;還是災害現場&#xff0c;普通手機往往因基站信號無法覆蓋而失效。此時&#xff0c;衛星電話便成為連接世界的“生命線”。…