很簡單
蘿北ssl適用于網(wǎng)站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!
因為沒有關閉文件指針fp
寫完后會自動后移
不信你可以在第一次
fwrite
后關閉文件指針
再打開
再fwrite試試
此時fp指針就又指向文件開頭了
所有關于文件指針操作的函數(shù)都是這樣的
不是因為wb
wb
是
write
byte
二進制寫入的意思
先操作fwrite時
是寫入內(nèi)存的
fclose時才寫入文件的
C語言對文件進行讀取之前需要先打開文件,然后再進行讀寫,讀寫完之后關閉文件。
可以使用兩組函數(shù)實現(xiàn):
一、C語言庫函數(shù)
打開文件:fopen
讀寫(一般對應成對使用):
fgetc---fputc fgets---fputs fread---fwrite
關閉文件:fclose
二、Linux系統(tǒng)函數(shù)
打開文件:open
讀寫(一般對應成對使用):read---write
關閉文件:close
//要另外說下如fprintf(stderr, "Can't open %s\n", file_app);這是向文件或者系統(tǒng)設備輸出的函數(shù);但他的文件指針為stderr;這是c中的標準錯誤輸出設備指針,系統(tǒng)自動分配為顯示器故相當于printf("Can't open %s\n", file_app);
#include stdio.h
#include stdlib.h
#include string.h
#define BUFSIZE 1024
#define SLEN 81
void append(FILE *source, FILE *dest);
int main(void)
{
FILE *fa, *fs; //定義2個文件類型指針
int files = 0; // 追加文件個數(shù)
char file_app[SLEN];
char file_src[SLEN]; // 2個字符串用來儲存文件名;
puts("Enter name of destination file:");//輸出Enter name of destination file:
gets(file_app);//輸入要追加的文件名
if ((fa = fopen(file_app, "a")) == NULL)//fa指向追加的目的文件,以追加方式打開文件,如果打開失敗退出;
{
fprintf(stderr, "Can't open %s\n", file_app);
exit(2);
}
if (setvbuf(fa, NULL, _IOFBF, BUFSIZE) != 0)//創(chuàng)建緩沖器與流相關,大小為BUFSIZE,作用是提高IO速度;如果打開失敗退出
{
fputs("Can't create output buffer\n", stderr);
exit(3);
}
puts("Enter name of first source file (empty line to quit):");//輸出Enter name of first source file (empty line to quit):
while (gets(file_src) file_src[0] != '\0')//輸入源文件如果是空串結(jié)束循環(huán)
{
if (strcmp(file_src, file_app) == 0)//如果源和追加文件相同
fputs("Can't append file to itself\n",stderr);
else if ((fs = fopen(file_src, "r")) == NULL)//如果打開源文件失敗
fprintf(stderr, "Can't open %s\n", file_src);
else
{
if (setvbuf(fs, NULL, _IOFBF, BUFSIZE) != 0)//創(chuàng)建緩沖器與流相關,大小為BUFSIZE,作用是提高IO速度;如果打開失敗開始下次循環(huán)
{
fputs("Can't create input buffer\n",stderr);
continue;
}
append(fs, fa);//函數(shù)
if (ferror(fs) != 0)//檢查文件操作是否有錯
fprintf(stderr,"Error in reading file %s.\n",
file_src);
if (ferror(fa) != 0)
fprintf(stderr,"Error in writing file %s.\n",
file_app);
fclose(fs);//關閉源文件
files++;//追加文件數(shù)+1
printf("File %s appended.\n", file_src);
puts("Next file (empty line to quit):");
}
}
printf("Done. %d files appended.\n", files);
fclose(fa);//關閉追加文件
return 0;
}
void append(FILE *source, FILE *dest)
{
size_t bytes;
static char temp[BUFSIZE];
while ((bytes = fread(temp,sizeof(char),BUFSIZE,source)) 0)//把源文件的內(nèi)容追加到追加文件,塊大小sizeof(char),塊數(shù)為BUFSIZE
fwrite(temp, sizeof (char), bytes, dest);//寫文件塊大小sizeof(char),塊數(shù)為BUFSIZE
}