前言
這篇文章我們來講解C語言中的文件操作,文件操作在C語言中算是一個比較重要的知識點,我們每天都在和文件打交道,各種文件夾的打開和關(guān)閉操作,那么這篇文件帶大家學(xué)習(xí)如何使用C語言中的文件操作來完成這個工作。
一、文件操作基本介紹
C語言提供了一組函數(shù),可以用于進行文件操作。這些函數(shù)包括打開文件、關(guān)閉文件、讀取文件內(nèi)容和寫入文件內(nèi)容等。下面是對C語言中文件操作的幾個常用函數(shù)的介紹和使用方法:
打開文件:
函數(shù)原型:FILE *fopen(const char *filename, const char *mode);
描述:用于打開指定文件并返回一個指向該文件的指針。
參數(shù):
filename:要打開的文件的名稱(包含路徑),可以是相對路徑或絕對路徑。
mode:打開文件的模式,包括 “r”(只讀)、“w”(寫入)、 “a”(追加)等等。
返回值:如果成功,返回一個指向文件的指針;如果失敗,返回空指針(NULL)。
關(guān)閉文件:
函數(shù)原型:int fclose(FILE *stream);
描述:用于關(guān)閉一個已打開的文件。
參數(shù):stream 是指向 FILE 結(jié)構(gòu)的指針,它表示要關(guān)閉的文件。
返回值:如果成功,返回 0;如果失敗,返回 EOF(-1)。
讀取文件內(nèi)容:
函數(shù)原型:size_t fread(void *ptr, size_t size, size_t count, FILE *stream);
描述:從文件中讀取數(shù)據(jù)到指定的內(nèi)存區(qū)域。
參數(shù):
ptr:指向要讀取數(shù)據(jù)存儲位置的指針。
size:每個數(shù)據(jù)項的大?。ㄒ宰止?jié)為單位)。
count:要讀取的數(shù)據(jù)項的個數(shù)。
stream:指向 FILE 結(jié)構(gòu)的指針,表示要讀取的文件。
返回值:返回已成功讀取的數(shù)據(jù)項個數(shù)。
寫入文件內(nèi)容:
函數(shù)原型:size_t fwrite(const void *ptr, size_t size, size_t count, FILE *stream);
描述:將指定內(nèi)存區(qū)域的數(shù)據(jù)寫入文件。
參數(shù):
ptr:指向要寫入數(shù)據(jù)的內(nèi)存區(qū)域的指針。
size:每個數(shù)據(jù)項的大?。ㄒ宰止?jié)為單位)。
count:要寫入的數(shù)據(jù)項的個數(shù)。
stream:指向 FILE 結(jié)構(gòu)的指針,表示要寫入的文件。
返回值:返回已成功寫入的數(shù)據(jù)項個數(shù)。
其他常用的文件操作函數(shù):
fseek:在文件中定位到指定的位置。
ftell:獲取文件指針的當前位置。
feof:檢測文件流是否已到達文件末尾。
這些函數(shù)提供了基本的文件操作功能,你可以根據(jù)具體的需求使用它們來讀取和寫入文件。請記得在使用完文件后,要調(diào)用 fclose 函數(shù)來關(guān)閉文件,以釋放系統(tǒng)資源。
二、編程練習(xí)
在VS中這些操作函數(shù)都變?yōu)榱藥в衉s的函數(shù)了,那么我們就在VS的環(huán)境下來練習(xí)一下文件操作吧。
當使用帶 _s 結(jié)尾的函數(shù)時,需要注意該系列函數(shù)在 C11 標準中引入,旨在提供更安全的編程環(huán)境。以下是使用一些帶有 _s 的文件操作函數(shù)的示例:
1. 使用 fopen_s 打開文件:
#include <stdio.h>
int main() {
FILE* file = NULL;
errno_t err = 0;
err = fopen_s(&file, "example.txt", "r");
if (err != 0) {
printf("無法打開文件。\n");
return 1;
}
// 文件操作...
fclose(file);
return 0;
}
2. 使用 fwrite_s 寫入文件:
#include <stdio.h>
int main() {
FILE* file = NULL;
errno_t err = 0;
err = fopen_s(&file, "example.txt", "w");
if (err != 0) {
printf("無法打開文件。\n");
return 1;
}
const char* content = "Hello, World!";
size_t size = strlen(content);
err = fwrite_s(content, size, sizeof(char), size, file);
if (err != 0) {
printf("寫入文件時發(fā)生錯誤。\n");
}
fclose(file);
return 0;
}
3. 使用 fgets_s 讀取一行文本:
#include <stdio.h>
int main() {
FILE* file = NULL;
errno_t err = 0;
err = fopen_s(&file, "example.txt", "r");
if (err != 0) {
printf("無法打開文件。\n");
return 1;
}
char buffer[100];
char* result = fgets(buffer, sizeof(buffer), file);
if (result != NULL) {
printf("讀取到的內(nèi)容:%s\n", buffer);
} else {
printf("讀取文件時發(fā)生錯誤。\n");
}
fclose(file);
return 0;
}
4. 使用 fwrite_s 寫入二進制數(shù)據(jù):
#include <stdio.h>
int main() {
FILE* file = NULL;
errno_t err = 0;
err = fopen_s(&file, "example.bin", "wb");
if (err != 0) {
printf("無法打開文件。\n");
return 1;
}
int data[] = { 1, 2, 3, 4, 5 };
size_t size = sizeof(data);
size_t count = sizeof(data) / sizeof(int);
err = fwrite_s(data, size, count, file);
if (err != 0) {
printf("寫入文件時發(fā)生錯誤。\n");
}
fclose(file);
return 0;
}
5. 使用 fread_s 讀取二進制數(shù)據(jù):
#include <stdio.h>
int main() {
FILE* file = NULL;
errno_t err = 0;
err = fopen_s(&file, "example.bin", "rb");
if (err != 0) {
printf("無法打開文件。\n");
return 1;
}
int data[5];
size_t size = sizeof(data[0]);
size_t count = sizeof(data) / size;
err = fread_s(data, sizeof(data), size, count, file);
if (err != 0) {
printf("讀取文件時發(fā)生錯誤。\n");
}
fclose(file);
// 打印讀取到的數(shù)據(jù)
for (int i = 0; i < 5; i++) {
printf("%d ", data[i]);
}
printf("\n");
return 0;
}
在這個示例中,我們使用 fread_s 函數(shù)從文件中讀取二進制數(shù)據(jù),并將數(shù)據(jù)存儲到整型數(shù)組 data 中。size 參數(shù)指定了每個數(shù)據(jù)項的大小,count 參數(shù)指定了要讀取的數(shù)據(jù)項數(shù)量。
這些示例展示了如何使用 _s 后綴的文件讀寫函數(shù)來進行二進制數(shù)據(jù)的讀寫操作。請根據(jù)你的具體需求進行相應(yīng)的修改和適應(yīng)。記得在使用完文件后,要使用 fclose 函數(shù)關(guān)閉文件以釋放資源。文章來源:http://www.zghlxwxcb.cn/news/detail-487540.html
總結(jié)
本篇文章就講解到這里希望大家可以學(xué)會C語言中的文件編程。文章來源地址http://www.zghlxwxcb.cn/news/detail-487540.html
到了這里,關(guān)于C語言基礎(chǔ)教學(xué)(文件操作)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!