国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C語(yǔ)言文件的讀寫(xiě)操作

這篇具有很好參考價(jià)值的文章主要介紹了C語(yǔ)言文件的讀寫(xiě)操作。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

目錄

一,文件

1.文本模式,二進(jìn)制模式

2.標(biāo)準(zhǔn)文件

二,文件的打開(kāi)和關(guān)閉

1.文件指針

1.1文件的打開(kāi)

?1.2文件的關(guān)閉

三,文件的順序讀寫(xiě)?

1.fgetc

2.fputc

3.fgets

4.fputs

5.fprintf

6.fscanf

7.fwrite

8.fread

?9.表格

四,文件的隨機(jī)讀寫(xiě)

1,fseek?

?2,ftell

3,rewind

判斷文件結(jié)束

1,feof

2,判斷結(jié)束

文件使用模式(表格)

文本文件的部分代碼示例

二進(jìn)制文件的部分代碼


一,文件

C把文件看作是一系列的連續(xù)的字節(jié),每個(gè)字節(jié)都能被單獨(dú)讀取。

C提供兩種文件模式:文本模式和二進(jìn)制模式

1.文本模式,二進(jìn)制模式

? ?首先要區(qū)分文本內(nèi)容和二進(jìn)制內(nèi)容,文本文件格式和二進(jìn)制文件格式,及文件的文本模式和二進(jìn)制模式。

  1. 文本內(nèi)容:如果文件最初使用的是二進(jìn)制編碼的字符(如ASCII碼)表示文本,該文件就是? ? ? ? ? ? ? ? ? ? ? 文本文件,其中包含文本內(nèi)容。
  2. 二進(jìn)制內(nèi)容:如果文件中的二進(jìn)制值代表機(jī)器語(yǔ)言代碼或數(shù)值數(shù)據(jù),圖片或者音樂(lè)編碼,該? ? ? ? ? ? ? ? ? ? ? ?文件就是二進(jìn)制文件,其中包含二進(jìn)制內(nèi)容。

2.標(biāo)準(zhǔn)文件

? c程序自動(dòng)打開(kāi)的三個(gè)文件

  1. 標(biāo)準(zhǔn)輸入(stdin):為程序提供輸入,getchar()和scanf()使用的文件。
  2. 標(biāo)準(zhǔn)輸出(stdout):為程序提供輸出,putchar()、printf()和puts()使用的文件。
  3. 標(biāo)準(zhǔn)錯(cuò)誤輸出(stderr):提供一個(gè)邏輯上不同的地方來(lái)發(fā)送錯(cuò)誤信息。

二,文件的打開(kāi)和關(guān)閉

1.文件指針

每個(gè)被使用的文件都在內(nèi)存中開(kāi)辟了一個(gè)相對(duì)應(yīng)的文件信息區(qū),用來(lái)存放文件的相關(guān)信息。這些信息是保存在一個(gè)結(jié)構(gòu)體變量中的,這個(gè)結(jié)構(gòu)體類型是由系統(tǒng)聲明的取名FILE(文件)。

定義一個(gè)文件指針變量:

FILE * pf ;//文件指針變量,指向被操作的文件

1.1文件的打開(kāi)

? 打開(kāi)文件我們用到一個(gè)打開(kāi)文件的函數(shù) fopen()查找?guī)旌瘮?shù)得知 :

C語(yǔ)言文件的讀寫(xiě)操作

所以我們用文件指針接受打開(kāi)的文件可操作流:

FILE * pf = fopen("文件名.后綴","打開(kāi)方式");
//打開(kāi)文件之后要判斷有沒(méi)有打開(kāi)成功
if(pf==NULL) //打開(kāi)失敗返回NULL
 perror("fopen");
 //perror報(bào)錯(cuò)函數(shù),會(huì)打印括號(hào)里面的錯(cuò)誤信息

是一個(gè)高度抽象的概念:

? ? ? ? ?程序直接傳輸?shù)酵獠吭O(shè)備比較繁瑣,所以寫(xiě)入流,讓流操作

C語(yǔ)言文件的讀寫(xiě)操作

?下述所有的流 同時(shí)包括 FILE文件指針pf。

?1.2文件的關(guān)閉

? ? ? 關(guān)閉與流關(guān)聯(lián)的文件并取消關(guān)聯(lián),使用fcloae():

C語(yǔ)言文件的讀寫(xiě)操作

fclose(pf);//關(guān)閉文件
pf=NULL; //置空指針

注意

  1. 打開(kāi)文件是有限的,只打開(kāi)不釋放,最后會(huì)打不開(kāi)文件。
  2. 路徑錯(cuò)誤也會(huì)導(dǎo)致打不開(kāi)文件
  3. 可以用絕對(duì)路徑打開(kāi)文件,但是要注意轉(zhuǎn)義字符(目錄下的絕對(duì)位置,直接到達(dá)目標(biāo)位置,通常是從盤(pán)符開(kāi)始的路徑)。

? ? ??

三,文件的順序讀寫(xiě)?

? ? ? ?先簡(jiǎn)單介紹所有的讀寫(xiě)函數(shù),然后再附上表格。

? ? ? ?所有用到的pf都表示文件指針。

1.fgetc

從流中獲取字符

C語(yǔ)言文件的讀寫(xiě)操作

參數(shù)是標(biāo)準(zhǔn)輸入流?

? ? ? ? 讀一次向后移動(dòng) 1 ,類似于指針的 ++ ,當(dāng)讀取超出文件長(zhǎng)度 出EOF(-1) ;

int ret =  fgetc(pf);

2,fputc

將字符寫(xiě)入流

C語(yǔ)言文件的讀寫(xiě)操作

?兩個(gè)參數(shù)一個(gè)是 字符,一個(gè)是 標(biāo)準(zhǔn)輸出流(stdout,stderr)

fputc('字符',輸出流);

3.fgets

從流中獲取字符串寫(xiě)入目標(biāo)數(shù)組

?C語(yǔ)言文件的讀寫(xiě)操作

第一個(gè)參數(shù)是 目標(biāo)數(shù)組的指針;

第二個(gè)復(fù)制到數(shù)組的最大個(gè)數(shù)(n-1個(gè),最后一個(gè)放'\0');

第三個(gè)參數(shù)是標(biāo)準(zhǔn)輸入流。

fgets(arr,4,pf);

4.fputs

將字符串寫(xiě)入流

C語(yǔ)言文件的讀寫(xiě)操作

第一個(gè)參數(shù)是要寫(xiě)入流的地址指針;

第二個(gè)參數(shù)是標(biāo)準(zhǔn)輸出流。

fputs("abcdef\n",pf);

5.fprintf

將格式化數(shù)據(jù)寫(xiě)入流

C語(yǔ)言文件的讀寫(xiě)操作

第一個(gè)參數(shù)是標(biāo)準(zhǔn)輸出流

第二個(gè)參數(shù)是格式化字符串等一系列的東西

Typedef struct S{
  char arr[10];
  int num;
  float sc;
}s;
fprintf(pf,"%s %d %d ",s.arr,s.num,s.sc) ;

6.fscanf

從流中讀取格式化數(shù)據(jù)

C語(yǔ)言文件的讀寫(xiě)操作

第一個(gè)參數(shù)是標(biāo)準(zhǔn)輸入流

第二個(gè)參數(shù)是格式化字符串等一系列的東西

fscanf(pf,"%s %d %f",&(s.arr),&(s,num),&(s.sc));

7.fwrite

以二進(jìn)制的方式寫(xiě)文件

C語(yǔ)言文件的讀寫(xiě)操作

第一個(gè)參數(shù)是寫(xiě)入元素?cái)?shù)組的指針

第二個(gè)參數(shù)是要寫(xiě)入的每個(gè)元素的大小(單位字節(jié))

第三個(gè)參數(shù)是要寫(xiě)入的元素個(gè)數(shù)

第四個(gè)參數(shù)是要被寫(xiě)入的地址

fwrite(&s,sizeof(struct S) , 1 ,pf) ;
//從s中找到1個(gè)元素,元素大小是sizeof(struct S)的數(shù)據(jù),寫(xiě)到pf中

8.fread

以二進(jìn)制的方式讀文件

C語(yǔ)言文件的讀寫(xiě)操作

第一個(gè)參數(shù)是接收讀取文件內(nèi)容的地址

第二個(gè)參數(shù)是要讀取文件的大小

第三個(gè)參數(shù)是要讀取文件的個(gè)數(shù)

第四個(gè)參數(shù)是被讀取文件的地址

fread(&s,sizeof(struct S),1,pf);
//從pf里讀取1個(gè)大小為sizeof(struct S)的文件到s中去

?9.表格

函數(shù) 功能 適用于
fgetc 字符輸入函數(shù)(讀文件 所有輸入流
fputc 字符輸出函數(shù)(寫(xiě)文件 所有輸出流
fgets 文本行輸入函數(shù)(讀一行 所有輸入流
fputs 文本行輸出函數(shù)(寫(xiě)一行 所有輸出流
fscanf 格式化輸入函數(shù) ( 所有輸入流
fprintf 格式化輸出函數(shù)(寫(xiě) 所有輸出流
fread 二進(jìn)制輸入? ( 文件
fwrite 二進(jìn)制輸出? (寫(xiě) 文件

這里會(huì)有些迷惑,為什么輸出函數(shù)后面會(huì)標(biāo)注 寫(xiě),輸入函數(shù)后面 標(biāo)注 讀 。

這里的讀寫(xiě) 是面向內(nèi)存的,也就是說(shuō)對(duì)于用戶來(lái)說(shuō)的輸入,對(duì)于內(nèi)存來(lái)說(shuō)是讀,就是讀取用戶的輸入信息,或者是別的位置的數(shù)據(jù);對(duì)用戶來(lái)說(shuō)的輸出,對(duì)于內(nèi)存來(lái)說(shuō)是寫(xiě),就是寫(xiě)出信息讓用戶可以看到。

四,文件的隨機(jī)讀寫(xiě)

1,fseek?

根據(jù)文件指針的位置和偏移量來(lái)定位文件指針

C語(yǔ)言文件的讀寫(xiě)操作

第一個(gè)參數(shù) 流

第二個(gè)參數(shù) 偏移量

第三個(gè)參數(shù) 起始位置

起始位置選項(xiàng): SEEK_CUR :文件當(dāng)前位置開(kāi)始

? ? ? ? ? ? ? ? ? ? ? ? ? SEEK_END?: 文件末尾位置開(kāi)始

? ? ? ? ? ? ? ? ? ? ? ? ? SEEK_SET? : 文件起始位置開(kāi)始

?2,ftell

返回文件指針的當(dāng)前位置

C語(yǔ)言文件的讀寫(xiě)操作

?參數(shù)是 流

3,rewind

讓文件指針回到起始位置

C語(yǔ)言文件的讀寫(xiě)操作

?參數(shù)是 流

判斷文件結(jié)束

1,feof

當(dāng)文件讀取結(jié)束時(shí),判斷文件是讀取失敗結(jié)束,還是遇到文件尾(讀取完成)結(jié)束。

C語(yǔ)言文件的讀寫(xiě)操作

2,判斷結(jié)束

判斷結(jié)束不可以用feof的返回值直接判斷文件是否結(jié)束,但可以通過(guò)以下幾種方式:

  1. fgets 判斷返回值是否為 EOF
  2. fgets 判斷返回值是否為NULL
  3. fread判斷返回值是否小于實(shí)際要讀取的個(gè)數(shù)

文件使用模式(表格)

文件使用方式 含義 如果指定文件不存在
" r "? ? ?(只讀) 為了輸入數(shù)據(jù),打開(kāi)一個(gè)已經(jīng)存在的文本文件 出錯(cuò)
" w "? ? (只寫(xiě)) 為了輸出數(shù)據(jù),打開(kāi)一個(gè)文本文件 建立一個(gè)新的文件
" a "? ? ?(追加) 向文本文件尾部添加數(shù)據(jù) 建立一個(gè)新的文件
" rb "? ? (只讀) 為了輸入數(shù)據(jù),打開(kāi)一個(gè)二進(jìn)制文件 出錯(cuò)
" wb "? ?(只寫(xiě)) 為了輸出數(shù)據(jù),打開(kāi)一個(gè)二進(jìn)制文件 建立一個(gè)新的文件
" ab "? ? (追加) 向一個(gè)二進(jìn)制文件尾部添加數(shù)據(jù) 出錯(cuò)
" r+? "? ? (讀寫(xiě)) 為了讀寫(xiě),打開(kāi)一個(gè)文本文件 出錯(cuò)
" w+ "? ?(讀寫(xiě)) 為了讀寫(xiě),建立一個(gè)新的文本文件 建立一個(gè)新的文件
" a+ "? ? (讀寫(xiě)) 打開(kāi)一個(gè)文件,在文件尾部進(jìn)行讀寫(xiě) 建立一個(gè)新的文件
"rb+? "? ?(讀寫(xiě)) 打開(kāi)一個(gè)二進(jìn)制文件(讀寫(xiě)) 出錯(cuò)
" wb+ "? (讀寫(xiě)) 建立一個(gè)新的二進(jìn)制文件(讀寫(xiě)) 建立一個(gè)新的文件
" ab+ "? (讀寫(xiě)) 打開(kāi)一個(gè)二進(jìn)制文件,在文件尾部進(jìn)行讀和寫(xiě) 建立一個(gè)新的文件

" wx " ," wbx " , " w+x " , " wb+x " 或 " w+bx "

類似于不含有x的模式,如果文件已經(jīng)存在或以獨(dú)占模式被打開(kāi),則打開(kāi)文件失敗


文本文件的部分代碼示例

 int c; //處理EOF,EOF的值是-1,不可以用 char類型 
 FILE *pf = fopen("test.c","r") ;//這里的文件名知識(shí)一個(gè)例子
 if(!pf)//判斷打開(kāi)文件是否成功
{
 perror("FILE error"); 
 return EXIT_FAILURE;//值為1, 運(yùn)行程序失敗
}
//fgetc讀取失敗時(shí)或者遇到文件結(jié)尾時(shí)返回EOF
 while((c = fgetc(pf) ) != EOF)
{
 putchar(c); 
}
//判斷結(jié)束原因
 if(ferror(pf))
{
 printf("I/O error");
} 
 else if(feof(pf) ) //前一個(gè)沒(méi)有出現(xiàn)錯(cuò)誤說(shuō)明是正常結(jié)束
{
 printf("END of FILE ……");
}
//ferroe 初始化為0 ,返回非0 的時(shí)表面出錯(cuò)

//關(guān)閉文件
fclose(pf);

二進(jìn)制文件的部分代碼

enum {
	size = 5
};
//枚舉 ,后面的size大小是5
double a[size] = { 1,2,3,4,5 };
FILE * pf = fopen("test.c", "wb"); //打開(kāi)文件
fwrite(a, sizeof(a), size, pf); //fwirte的返回值是一個(gè)size_t類型
fclose(pf);//關(guān)閉文件

double b[size];
FILE * pf = fopen("test.c", "rb");
size_t ret = fread(b, sizeof(b), size, pf);//讀取

if(ret == 1) //當(dāng)ret == 1 時(shí),讀取成功
{
	puts("successfully :");
	for (int n = 0; n < size; n++)//打印內(nèi)容
	{
		printf("%f ",b[n]);
	}
	putchar('\n');
}
else //失敗時(shí)判斷失敗的原因
{
	if (feof(pf))
	{
		printf("end of file:");
	}
	else if (ferror(pf))
	{
		perror("Error:");
	}
}
fclose(pf);//關(guān)閉文件

上述兩個(gè)代碼段,需要放到具體內(nèi)容里,用合適的變量接受具體的返回值,返回值類型上文都有介紹。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-495076.html

到了這里,關(guān)于C語(yǔ)言文件的讀寫(xiě)操作的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • C++文件操作基礎(chǔ) 讀寫(xiě)文本、二進(jìn)制文件 輸入輸出流 文件位置指針以及隨機(jī)存取 文件緩沖區(qū)以及流狀態(tài)

    文本文件一般以行的形式組織數(shù)據(jù)。 包含頭文件: #include fstream 類: ofstream(output file stream) ofstream 打開(kāi)文件的模式(方式):類內(nèi)open()成員函數(shù)參數(shù)2.參數(shù)1是文件存儲(chǔ)/創(chuàng)建路徑 例如:fout.open(filename,ios::app); 對(duì)于 ofstream,不管用哪種模式打開(kāi)文件,如果文件不存在,都會(huì)創(chuàng)

    2024年01月25日
    瀏覽(21)
  • C語(yǔ)言文件的讀寫(xiě)操作

    C語(yǔ)言文件的讀寫(xiě)操作

    目錄 一,文件 1.文本模式,二進(jìn)制模式 2.標(biāo)準(zhǔn)文件 二,文件的打開(kāi)和關(guān)閉 1.文件指針 1.1文件的打開(kāi) ?1.2文件的關(guān)閉 三,文件的順序讀寫(xiě)? 1.fgetc 2.fputc 3.fgets 4.fputs 5.fprintf 6.fscanf 7.fwrite 8.fread ?9.表格 四,文件的隨機(jī)讀寫(xiě) 1,fseek? ?2,ftell 3,rewind 判斷文件結(jié)束 1,feof 2,判斷

    2024年02月10日
    瀏覽(19)
  • C語(yǔ)言如何使用文件讀寫(xiě)來(lái)處理文件操作?

    首先,讓我們來(lái)談?wù)勎募x寫(xiě),這聽(tīng)起來(lái)有點(diǎn)像一個(gè)神秘的活動(dòng),就像你是一個(gè)特工在閱讀和修改機(jī)密文件一樣!所以,假設(shè)你是一個(gè)特工小魚(yú),正在進(jìn)行秘密任務(wù)。 首先,你需要給自己起一個(gè)特工代號(hào)。我們先把你叫做Agent007。接下來(lái),你需要打開(kāi)一個(gè)目標(biāo)文件,就像你發(fā)

    2024年02月12日
    瀏覽(26)
  • 【c語(yǔ)言】二進(jìn)制文件的讀寫(xiě)操作

    【c語(yǔ)言】二進(jìn)制文件的讀寫(xiě)操作

    創(chuàng)作不易,本篇文章如果幫助到了你,還請(qǐng)點(diǎn)贊 關(guān)注支持一下???)!! 主頁(yè)專欄有更多知識(shí),如有疑問(wèn)歡迎大家指正討論,共同進(jìn)步! ??c語(yǔ)言系列專欄:c語(yǔ)言之路重點(diǎn)知識(shí)整合 ?? 給大家跳段街舞感謝支持!? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 本文基

    2024年02月12日
    瀏覽(23)
  • vim三種模式,文本操作(操作字符/光標(biāo),列出行號(hào)可視化塊模式/多文件查看)

    vim三種模式,文本操作(操作字符/光標(biāo),列出行號(hào)可視化塊模式/多文件查看)

    目錄 ?vim--文本編輯器 功能 基本概念? 命令/默認(rèn)模式 插入模式 底行模式 文本操作 引入 移動(dòng)光標(biāo)位置 刪除字符 -- x/dd 復(fù)制/粘貼字符 -- yw/yy+p 替換文本 -- r / %s 底行模式 全局替換 -- /g 撤銷操作 -- u / ctrl+r 修改字符 -- cw 示例 跳行 -- ctrl+g 底行模式 列出行號(hào)(底行模式) --?se

    2024年02月06日
    瀏覽(53)
  • flutter:文件系統(tǒng)目錄、文件讀寫(xiě)

    flutter:文件系統(tǒng)目錄、文件讀寫(xiě)

    參考:老孟 文件存儲(chǔ)和網(wǎng)絡(luò)請(qǐng)求 Dart的 IO 庫(kù)包含了文件讀寫(xiě)的相關(guān)類,它屬于 Dart 語(yǔ)法標(biāo)準(zhǔn)的一部分,所以通過(guò) Dart IO 庫(kù),無(wú)論是 Dart VM 下的腳本還是 Flutter,都是通過(guò) Dart IO 庫(kù)來(lái)操作文件的。但是不同的平臺(tái)對(duì)應(yīng)的文件系統(tǒng)是不同的,比如文件路徑,因此通常使用Google 官方

    2024年02月09日
    瀏覽(17)
  • R語(yǔ)言【base】——dir.exists()和dir.create()目錄和文件權(quán)限的操作

    Package? base ?version 4.3.2 參數(shù)【path】 :是一個(gè)字符向量,包含一個(gè)路徑名。 參數(shù)【paths】 :字符向量,其中包含文件或目錄路徑。 參數(shù)【showWarnings】 :邏輯值。是否應(yīng)顯示失敗警告? 參數(shù)【recursive】 :邏輯值。是否應(yīng)該創(chuàng)建路徑中除最后一個(gè)元素之外的其他元素?如果為

    2024年02月04日
    瀏覽(25)
  • qt讀寫(xiě)文本文件

    使用QFile類進(jìn)行讀寫(xiě),使用Open函數(shù)打開(kāi)文件,打開(kāi)方式有: QIODevice::NotOpen 0x0000 不打開(kāi) QIODevice::ReadOnly 0x0001 只讀方式 QIODevice::WriteOnly 0x0002 只寫(xiě)方式,如果文件不存在則會(huì)自動(dòng)創(chuàng)建文件 QIODevice::ReadWrite ReadOnly | WriteOnly 讀寫(xiě)方式 QIODevice::Append 0x0004 此模式表明所有數(shù)據(jù)寫(xiě)入到文

    2024年02月10日
    瀏覽(93)
  • C語(yǔ)言--文件操作詳解(2)(文本文件和二進(jìn)制文件,文件讀取結(jié)束的判定,用函數(shù)進(jìn)行文件的拷貝,文件緩沖區(qū))

    C語(yǔ)言--文件操作詳解(2)(文本文件和二進(jìn)制文件,文件讀取結(jié)束的判定,用函數(shù)進(jìn)行文件的拷貝,文件緩沖區(qū))

    本篇文章主要介紹了文本文件和二進(jìn)制文件,文件讀取結(jié)束的判定,如何使用函數(shù)進(jìn)行文件的拷貝,文件緩沖區(qū)的相關(guān)知識(shí)。 以及具有保存功能的八功能通訊錄的源碼。 據(jù)數(shù)據(jù)的組織形式,數(shù)據(jù)文件被稱為文本文件或者二進(jìn)制文件。 ①數(shù)據(jù)在內(nèi)存中以二進(jìn)制的形式存儲(chǔ),如

    2024年02月08日
    瀏覽(27)
  • VBA下載二進(jìn)制文件,文本讀寫(xiě)

    這里使用了vba如下兩個(gè)對(duì)象: Microsoft.XMLHTTP :文件讀寫(xiě),可讀寫(xiě)二進(jìn)制,可指定編碼,對(duì)于utf-8編碼文本文件使用FSO的TextStream對(duì)象打開(kāi),讀取到的內(nèi)容可能會(huì)出現(xiàn)亂碼,可以使用該對(duì)象打開(kāi);前期綁定添加引用: Microsoft ActiveX Data Objects 2.8 Microsoft.XMLHTTP :發(fā)送請(qǐng)求并獲得返回,

    2024年02月16日
    瀏覽(88)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包