一、打開文件
FILE *fopen(const char *filename, const char *mode);
c++fopen是標(biāo)準(zhǔn)C庫中的文件操作函數(shù),用于打開文件并返回指向該文件的FILE指針,使用該函數(shù)前需要包含頭文件#include
。它接收兩個(gè)參數(shù):
模式 | 描述 |
---|---|
"r" | 以只讀方式打開文件。該文件必須存在 |
"w" | 以只寫方式打開文件。如果文件不存在,則創(chuàng)建一個(gè)新文件;如果文件存在,則清空該文件 |
"a" | 以追加方式打開文件。如果文件不存在,則創(chuàng)建一個(gè)新文件;如果文件存在,則在文件末尾寫入 |
"r+" | 以讀寫方式打開文件。該文件必須存在 |
"w+" | 以讀寫方式打開文件。如果文件不存在,則創(chuàng)建一個(gè)新文件;如果文件存在,則清空該文件 |
"a+" | 以讀寫方式打開文件。如果文件不存在,則創(chuàng)建一個(gè)新文件;如果文件存在,則在文件末尾寫入 |
打開文件失敗時(shí),該函數(shù)將返回空指針NULL。
二、讀寫文件
c++fopen函數(shù)成功打開文件后,我們就可以對(duì)文件進(jìn)行讀寫操作了。
1. 寫入數(shù)據(jù)
size_t fwrite(const void *ptr, size_t size, size_t count, FILE *stream);
fwrite函數(shù)用于向打開的文件中寫入數(shù)據(jù),它的參數(shù)解釋如下:
ptr:要寫入的數(shù)據(jù)的地址。 size:要寫入的每個(gè)數(shù)據(jù)項(xiàng)的大小(單位是字節(jié))。 count:要寫入的數(shù)據(jù)項(xiàng)的個(gè)數(shù)。 stream:指向FILE對(duì)象的指針。函數(shù)的返回值為實(shí)際寫入到文件中的數(shù)據(jù)項(xiàng)的個(gè)數(shù)。如果沒有成功寫入任何項(xiàng),則函數(shù)將返回0。
2. 讀取數(shù)據(jù)
size_t fread(void *ptr, size_t size, size_t count, FILE *stream);
fread函數(shù)用于從打開的文件中讀取數(shù)據(jù),它的參數(shù)解釋如下:
ptr:被讀取數(shù)據(jù)的存儲(chǔ)地址。 size:每個(gè)數(shù)據(jù)項(xiàng)的大?。▎挝粸樽止?jié))。 count:要讀取的數(shù)據(jù)項(xiàng)數(shù)。 stream:指向FILE對(duì)象的指針。函數(shù)的返回值為確切讀取到的數(shù)據(jù)項(xiàng)數(shù)。如果讀取失敗,例如讀到文件末尾或者發(fā)生了錯(cuò)誤,函數(shù)將返回小于count的值。
三、關(guān)閉文件
int fclose(FILE *stream);
使用c++fopen函數(shù)成功打開文件之后,應(yīng)該盡快關(guān)閉該文件,避免該文件繼續(xù)被占用。
fclose函數(shù)被用來關(guān)閉指定的數(shù)據(jù)流,并釋放與該流相關(guān)的所有資源。如果調(diào)用成功,則返回值為0;如果失敗,則返回EOF。
四、代碼示例
#include
int main()
{
FILE *fp = fopen("example.txt", "w");
if(fp == NULL)
{
printf("Failed to open file.\n");
return 1;
}
fprintf(fp, "Hello, World!\n");
fclose(fp);
char buffer[100];
fp = fopen("example.txt", "r");
if(fp == NULL)
{
printf("Failed to open file.\n");
return 1;
}
fread(buffer, sizeof(buffer), 1, fp);
printf("%s", buffer);
fclose(fp);
return 0;
}