青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

啤酒

一個(gè)空白者

 

文件類型操作

取得文件名
{
????? CString
????? FilePathName;
????? CFileDialog dlg(TRUE);///TRUE為OPEN對(duì)話框,F(xiàn)ALSE為SAVE AS對(duì)話框
????? if(dlg.DoModal()==IDOK)
????? FilePathName=dlg.GetPathName();
}
相關(guān)信息:CFileDialog 用于取文件名的幾個(gè)成員函數(shù):
假如選擇的文件是C:\WINDOWS\TEST.EXE
則:
?? (1)GetPathName();取文件名全稱,包括完整路徑。取回C:\WINDOWS\TEST.EXE
?? (2)GetFileTitle();取回TEST
?? (3)GetFileName();取文件全名:TEST.EXE
?? (4)GetFileExt();取擴(kuò)展名EXE
?
打開(kāi)文件
CFile file("C:\HELLO.TXT",CFile::modeRead);///只讀方式打開(kāi)
///CFile::modeRead可改為 CFile::modeWrite(只寫(xiě)),CFile::modeReadWrite(讀寫(xiě)),CFile::modeCreate(新建)
例子:
{
??? CFile file;
??? file.Open("C:\HELLO.TXT",CFile::modeCreate|Cfile::modeWrite);
??? ...
??? ...
}
?
移動(dòng)文件指針
??? file.Seek(100,CFile::begin);///從文件頭開(kāi)始往下移動(dòng)100字節(jié)
??? file.Seek(-50,CFile::end);///從文件末尾往上移動(dòng)50字節(jié)
??? file.Seek(-30,CFile::current);///從當(dāng)前位置往上移動(dòng)30字節(jié)
??? file.SeekToBegin();///移到文件頭
??? file.SeekToEnd();///移到文件尾

對(duì)于CFileDialog 使用可參照下面

:通用對(duì)話框的使用
? ? 大家都遇到過(guò)CFileDialog文件對(duì)話框吧,它的參數(shù)讓人頭疼.下面解除大家的頭疼.
? ? 先在使用文件對(duì)話框的類的類定義文件中加入對(duì)象定義CFileDialog m_MyOpenDialog(TRUE,"avi","*.avi")。隨后,在需要使用該對(duì)話框的地方加入以下語(yǔ)句:
? ? m_MyOpenDialog.Domodal();
? ? 就可以預(yù)覽所有.avi文件.

? ? 其調(diào)用規(guī)則為:
? ? 函數(shù)原型:
? ? CFileDialog(BOOL bOpenFileDialog,LPCTSTR lpszDefExt=NULL,LPCTSTR lpszFileName=NULL,DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPR OMPT,LPCTSTR lpszFilter=NULL,CWnd * pParentWnd
=NULL);
? ? 參數(shù)說(shuō)明:
? ? bOpenFileDialog:為T(mén)RUE或FALSE。TRUE為打開(kāi)文件;FALSE為保存文件。
? ? lpszDefExt? ???:為缺省的擴(kuò)展名。
? ? lpszFileName? ?:為顯示在文件名組合框的編輯框的文件名,一般可選NULL
? ? dwFlags? ?? ???:為對(duì)話框風(fēng)格,一般為OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,即隱藏只讀選項(xiàng)和覆蓋已有文件前提示。
? ? LpszFilter? ???:為下拉列表樞中顯示文件類型。
? ? pParentWnd? ???:一般可選NULL。
? ? 例如:在文件類型列表框的編輯框要顯示“可執(zhí)行文件(*.exe)”,而在它的下拉列表框中列出“視頻文件(*.avi)、All Files(*.*)”內(nèi)容,則變量定義如下:CFileDialog m_MyOpenDialog(TRUE,"exe",NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"可執(zhí)行文件(*.exe) | *.exe|視頻文件(*.bat) | *.bat |All Files (*.*) | *.* ||",NULL);
? ? 注:看看沒(méi)有*.*后的||會(huì)是什么效果.

關(guān)于:fseek

fseek()函數(shù)有三個(gè)參數(shù)


第一個(gè)是文件的指針


第二個(gè)是偏移量? 也就是指針移動(dòng)的字符數(shù)?

?? //這個(gè)參數(shù)必須是L類型

?? //如果是負(fù)數(shù)? 表示指針?lè)聪蛞苿?dòng)(向文件頭的方向)


第三個(gè)是偏移量的相對(duì)開(kāi)始位置

0? 表示從文件開(kāi)始處? 偏移 L

1? 表示從當(dāng)前位置??? 偏移 L

2? 表示從文件末尾??? 偏移 L? //只能是負(fù)數(shù)了? 也就是只能前向移動(dòng)
fseek
Moves the file pointer to a specified location.

int fseek(
?? FILE *stream,
?? long offset,
?? int origin
);
Parameters
stream
Pointer to FILE structure.
offset
Number of bytes from origin.
origin
Initial position.
Return Value
If successful, fseek returns 0. Otherwise, it returns a nonzero value. On devices incapable of seeking, the return value is undefined.

Remarks
The fseek function moves the file pointer (if any) associated with stream to a new location that is offset bytes from origin. The next operation on the stream takes place at the new location. On a stream open for update, the next operation can be either a read or a write. The argument origin must be one of the following constants, defined in STDIO.H:

SEEK_CUR
Current position of file pointer.
SEEK_END
End of file.
SEEK_SET
Beginning of file.

再轉(zhuǎn)一片文章:

c中的文件操作
1
C?的文件操作/TD>
 
文件

文件的基本概念
  所謂“文件”是指一組相關(guān)數(shù)據(jù)的有序集合。?這個(gè)數(shù)據(jù)集有一個(gè)名稱,叫做文件名。?實(shí)際上在前面的各章中我們已經(jīng)多次使用了文件,例如源程序文件、目標(biāo)文件、可執(zhí)行文件、庫(kù)文件?(頭文件)等。文件通常是駐留在外部介質(zhì)(如磁盤(pán)等)上的,?在使用時(shí)才調(diào)入內(nèi)存中來(lái)。從不同的角度可對(duì)文件作不同的分類。從用戶的角度看,文件可分為普通文件和設(shè)備文件兩種。

  普通文件是指駐留在磁盤(pán)或其它外部介質(zhì)上的一個(gè)有序數(shù)據(jù)集,可以是源文件、目標(biāo)文件、可執(zhí)行程序;?也可以是一組待輸入處理的原始數(shù)據(jù),或者是一組輸出的結(jié)果。對(duì)于源文件、目標(biāo)文件、?可執(zhí)行程序可以稱作程序文件,對(duì)輸入輸出數(shù)據(jù)可稱作數(shù)據(jù)文件。

  設(shè)備文件是指與主機(jī)相聯(lián)的各種外部設(shè)備,如顯示器、打印機(jī)、鍵盤(pán)等。在操作系統(tǒng)中,把外部設(shè)備也看作是一個(gè)文件來(lái)進(jìn)行管理,把它們的輸入、輸出等同于對(duì)磁盤(pán)文件的讀和寫(xiě)。?通常把顯示器定義為標(biāo)準(zhǔn)輸出文件,?一般情況下在屏幕上顯示有關(guān)信息就是向標(biāo)準(zhǔn)輸出文件輸出。如前面經(jīng)常使用的printf,putchar?函數(shù)就是這類輸出。鍵盤(pán)通常被指定標(biāo)準(zhǔn)的輸入文件,?從鍵盤(pán)上輸入就意味著從標(biāo)準(zhǔn)輸入文件上輸入數(shù)據(jù)。scanf,getchar函數(shù)就屬于這類輸入。?

  從文件編碼的方式來(lái)看,文件可分為ASCII碼文件和二進(jìn)制碼文件兩種。

  ASCII文件也稱為文本文件,這種文件在磁盤(pán)中存放時(shí)每個(gè)字符對(duì)應(yīng)一個(gè)字節(jié),用于存放對(duì)應(yīng)的ASCII碼。例如,數(shù)5678的存儲(chǔ)形式為:
ASC碼:? 00110101?00110110?00110111?00111000
     ↓?    ↓    ↓?   ↓
十進(jìn)制碼:?5     6    7    8?共占用4個(gè)字節(jié)。ASCII碼文件可在屏幕上按字符顯示,?例如源程序文件就是ASCII文件,用DOS命令TYPE可顯示文件的內(nèi)容。?由于是按字符顯示,因此能讀懂文件內(nèi)容。

  二進(jìn)制文件是按二進(jìn)制的編碼方式來(lái)存放文件的。?例如,?數(shù)5678的存儲(chǔ)形式為:?00010110?00101110只占二個(gè)字節(jié)。二進(jìn)制文件雖然也可在屏幕上顯示,?但其內(nèi)容無(wú)法讀懂。C系統(tǒng)在處理這些文件時(shí),并不區(qū)分類型,都看成是字符流,按字節(jié)進(jìn)行處理。?輸入輸出字符流的開(kāi)始和結(jié)束只由程序控制而不受物理符號(hào)(如回車(chē)符)的控制。?因此也把這種文件稱作“流式文件”。

  本章討論流式文件的打開(kāi)、關(guān)閉、讀、寫(xiě)、?定位等各種操作。文件指針在C語(yǔ)言中用一個(gè)指針變量指向一個(gè)文件,?這個(gè)指針?lè)Q為文件指針。通過(guò)文件指針就可對(duì)它所指的文件進(jìn)行各種操作。?定義說(shuō)明文件指針的一般形式為:?FILE*?指針變量標(biāo)識(shí)符;?其中FILE應(yīng)為大寫(xiě),它實(shí)際上是由系統(tǒng)定義的一個(gè)結(jié)構(gòu),?該結(jié)構(gòu)中含有文件名、文件狀態(tài)和文件當(dāng)前位置等信息。?在編寫(xiě)源程序時(shí)不必關(guān)心FILE結(jié)構(gòu)的細(xì)節(jié)。例如:FILE?*fp;?表示fp是指向FILE結(jié)構(gòu)的指針變量,通過(guò)fp?即可找存放某個(gè)文件信息的結(jié)構(gòu)變量,然后按結(jié)構(gòu)變量提供的信息找到該文件,?實(shí)施對(duì)文件的操作。習(xí)慣上也籠統(tǒng)地把fp稱為指向一個(gè)文件的指針。文件的打開(kāi)與關(guān)閉文件在進(jìn)行讀寫(xiě)操作之前要先打開(kāi),使用完畢要關(guān)閉。?所謂打開(kāi)文件,實(shí)際上是建立文件的各種有關(guān)信息,?并使文件指針指向該文件,以便進(jìn)行其它操作。關(guān)閉文件則斷開(kāi)指針與文件之間的聯(lián)系,也就禁止再對(duì)該文件進(jìn)行操作。

  在C語(yǔ)言中,文件操作都是由庫(kù)函數(shù)來(lái)完成的。?在本章內(nèi)將介紹主要的文件操作函數(shù)。

文件打開(kāi)函數(shù)fopen

  fopen函數(shù)用來(lái)打開(kāi)一個(gè)文件,其調(diào)用的一般形式為:?文件指針名=fopen(文件名,使用文件方式)?其中,“文件指針名”必須是被說(shuō)明為FILE?類型的指針變量,“文件名”是被打開(kāi)文件的文件名。?“使用文件方式”是指文件的類型和操作要求。“文件名”是字符串常量或字符串?dāng)?shù)組。例如:?
FILE?*fp;
fp=("file?a","r");
其意義是在當(dāng)前目錄下打開(kāi)文件file?a,?只允許進(jìn)行“讀”操作,并使fp指向該文件。
 
 
 
 
2
C?的文件操作/TD>
 
又如:
FILE?*fphzk
fphzk=("c:\\hzk16',"rb")
其意義是打開(kāi)C驅(qū)動(dòng)器磁盤(pán)的根目錄下的文件hzk16,?這是一個(gè)二進(jìn)制文件,只允許按二進(jìn)制方式進(jìn)行讀操作。兩個(gè)反斜線“\\?”中的第一個(gè)表示轉(zhuǎn)義字符,第二個(gè)表示根目錄。使用文件的方式共有12種,下面給出了它們的符號(hào)和意義。?
文件使用方式?       意?義
“rt”      只讀打開(kāi)一個(gè)文本文件,只允許讀數(shù)據(jù)?
“wt”      只寫(xiě)打開(kāi)或建立一個(gè)文本文件,只允許寫(xiě)數(shù)據(jù)
“at”      追加打開(kāi)一個(gè)文本文件,并在文件末尾寫(xiě)數(shù)據(jù)
“rb”      只讀打開(kāi)一個(gè)二進(jìn)制文件,只允許讀數(shù)據(jù)
“wb”    ? ?只寫(xiě)打開(kāi)或建立一個(gè)二進(jìn)制文件,只允許寫(xiě)數(shù)據(jù)
“ab”?    ? 追加打開(kāi)一個(gè)二進(jìn)制文件,并在文件末尾寫(xiě)數(shù)據(jù)
“rt+”     ?讀寫(xiě)打開(kāi)一個(gè)文本文件,允許讀和寫(xiě)
“wt+”     ?讀寫(xiě)打開(kāi)或建立一個(gè)文本文件,允許讀寫(xiě)
“at+”     ?讀寫(xiě)打開(kāi)一個(gè)文本文件,允許讀,或在文件末追加數(shù)?據(jù)
“rb+”     ?讀寫(xiě)打開(kāi)一個(gè)二進(jìn)制文件,允許讀和寫(xiě)?
“wb+”     ?讀寫(xiě)打開(kāi)或建立一個(gè)二進(jìn)制文件,允許讀和寫(xiě)
“ab+”?     讀寫(xiě)打開(kāi)一個(gè)二進(jìn)制文件,允許讀,或在文件末追加數(shù)據(jù)

對(duì)于文件使用方式有以下幾點(diǎn)說(shuō)明:
1.?文件使用方式由r,w,a,t,b,+六個(gè)字符拼成,各字符的含義是:
r(read):?讀
w(write):?寫(xiě)
a(append):?追加
t(text):?文本文件,可省略不寫(xiě)
b(banary):?二進(jìn)制文件
+:?讀和寫(xiě)

2.?凡用“r”打開(kāi)一個(gè)文件時(shí),該文件必須已經(jīng)存在,?且只能從該文件讀出。

3.?用“w”打開(kāi)的文件只能向該文件寫(xiě)入。?若打開(kāi)的文件不存在,則以指定的文件名建立該文件,若打開(kāi)的文件已經(jīng)存在,則將該文件刪去,重建一個(gè)新文件。

4.?若要向一個(gè)已存在的文件追加新的信息,只能用“a?”方式打開(kāi)文件。但此時(shí)該文件必須是存在的,否則將會(huì)出錯(cuò)。

5.?在打開(kāi)一個(gè)文件時(shí),如果出錯(cuò),fopen將返回一個(gè)空指針值NULL。在程序中可以用這一信息來(lái)判別是否完成打開(kāi)文件的工作,并作相應(yīng)的處理。因此常用以下程序段打開(kāi)文件:
if((fp=fopen("c:\\hzk16","rb")==NULL)
{
printf("\nerror?on?open?c:\\hzk16?file!");
getch();
exit(1);
}
  這段程序的意義是,如果返回的指針為空,表示不能打開(kāi)C盤(pán)根目錄下的hzk16文件,則給出提示信息“error?on?open?c:\?hzk16file!”,下一行g(shù)etch()的功能是從鍵盤(pán)輸入一個(gè)字符,但不在屏幕上顯示。在這里,該行的作用是等待,?只有當(dāng)用戶從鍵盤(pán)敲任一鍵時(shí),程序才繼續(xù)執(zhí)行,?因此用戶可利用這個(gè)等待時(shí)間閱讀出錯(cuò)提示。敲鍵后執(zhí)行exit(1)退出程序。

6.?把一個(gè)文本文件讀入內(nèi)存時(shí),要將ASCII碼轉(zhuǎn)換成二進(jìn)制碼,?而把文件以文本方式寫(xiě)入磁盤(pán)時(shí),也要把二進(jìn)制碼轉(zhuǎn)換成ASCII碼,因此文本文件的讀寫(xiě)要花費(fèi)較多的轉(zhuǎn)換時(shí)間。對(duì)二進(jìn)制文件的讀寫(xiě)不存在這種轉(zhuǎn)換。

7.?標(biāo)準(zhǔn)輸入文件(鍵盤(pán)),標(biāo)準(zhǔn)輸出文件(顯示器?),標(biāo)準(zhǔn)出錯(cuò)輸出(出錯(cuò)信息)是由系統(tǒng)打開(kāi)的,可直接使用。文件關(guān)閉函數(shù)fclose文件一旦使用完畢,應(yīng)用關(guān)閉文件函數(shù)把文件關(guān)閉,?以避免文件的數(shù)據(jù)丟失等錯(cuò)誤。

fclose函數(shù)

調(diào)用的一般形式是:?fclose(文件指針);?例如:
fclose(fp);?正常完成關(guān)閉文件操作時(shí),fclose函數(shù)返回值為0。如返回非零值則表示有錯(cuò)誤發(fā)生。文件的讀寫(xiě)對(duì)文件的讀和寫(xiě)是最常用的文件操作。?

在C語(yǔ)言中提供了多種文件讀寫(xiě)的函數(shù):?
·字符讀寫(xiě)函數(shù)?:fgetc和fputc
·字符串讀寫(xiě)函數(shù):fgets和fputs
·數(shù)據(jù)塊讀寫(xiě)函數(shù):freed和fwrite
·格式化讀寫(xiě)函數(shù):fscanf和fprinf

  下面分別予以介紹。使用以上函數(shù)都要求包含頭文件stdio.h。字符讀寫(xiě)函數(shù)fgetc和fputc字符讀寫(xiě)函數(shù)是以字符(字節(jié))為單位的讀寫(xiě)函數(shù)。?每次可從文件讀出或向文件寫(xiě)入一個(gè)字符。
 
 
 
 
3
C?的文件操作/TD>
 

一、讀字符函數(shù)fgetc

  fgetc函數(shù)的功能是從指定的文件中讀一個(gè)字符,函數(shù)調(diào)用的形式為:?字符變量=fgetc(文件指針);?例如:ch=fgetc(fp);其意義是從打開(kāi)的文件fp中讀取一個(gè)字符并送入ch中。

  對(duì)于fgetc函數(shù)的使用有以下幾點(diǎn)說(shuō)明:
1.?在fgetc函數(shù)調(diào)用中,讀取的文件必須是以讀或讀寫(xiě)方式打開(kāi)的。

2.?讀取字符的結(jié)果也可以不向字符變量賦值,例如:fgetc(fp);但是讀出的字符不能保存。

3.?在文件內(nèi)部有一個(gè)位置指針。用來(lái)指向文件的當(dāng)前讀寫(xiě)字節(jié)。在文件打開(kāi)時(shí),該指針總是指向文件的第一個(gè)字節(jié)。使用fgetc?函數(shù)后,?該位置指針將向后移動(dòng)一個(gè)字節(jié)。?因此可連續(xù)多次使用fgetc函數(shù),讀取多個(gè)字符。?應(yīng)注意文件指針和文件內(nèi)部的位置指針不是一回事。文件指針是指向整個(gè)文件的,須在程序中定義說(shuō)明,只要不重新賦值,文件指針的值是不變的。文件內(nèi)部的位置指針用以指示文件內(nèi)部的當(dāng)前讀寫(xiě)位置,每讀寫(xiě)一次,該指針均向后移動(dòng),它不需在程序中定義說(shuō)明,而是由系統(tǒng)自動(dòng)設(shè)置的。

[例10.1]讀入文件e10-1.c,在屏幕上輸出。
#include
main()
{
FILE?*fp;
char?ch;
if((fp=fopen("e10_1.c","rt"))==NULL)
{
printf("Cannot?open?file?strike?any?key?exit!");
getch();
exit(1);
}
ch=fgetc(fp);
while?(ch!=EOF)
{
putchar(ch);
ch=fgetc(fp);
}
fclose(fp);
}
  本例程序的功能是從文件中逐個(gè)讀取字符,在屏幕上顯示。?程序定義了文件指針fp,以讀文本文件方式打開(kāi)文件“e10_1.c”,?并使fp指向該文件。如打開(kāi)文件出錯(cuò),?給出提示并退出程序。程序第12行先讀出一個(gè)字符,然后進(jìn)入循環(huán),?只要讀出的字符不是文件結(jié)束標(biāo)志(每個(gè)文件末有一結(jié)束標(biāo)志EOF)就把該字符顯示在屏幕上,再讀入下一字符。每讀一次,文件內(nèi)部的位置指針向后移動(dòng)一個(gè)字符,文件結(jié)束時(shí),該指針指向EOF。執(zhí)行本程序?qū)@示整個(gè)文件。

二、寫(xiě)字符函數(shù)fputc

  fputc函數(shù)的功能是把一個(gè)字符寫(xiě)入指定的文件中,函數(shù)調(diào)用的?形式為:?fputc(字符量,文件指針);?其中,待寫(xiě)入的字符量可以是字符常量或變量,例如:fputc('a',fp);其意義是把字符a寫(xiě)入fp所指向的文件中。

  對(duì)于fputc函數(shù)的使用也要說(shuō)明幾點(diǎn):
1.?被寫(xiě)入的文件可以用、寫(xiě)、讀寫(xiě),追加方式打開(kāi),用寫(xiě)或讀寫(xiě)方式打開(kāi)一個(gè)已存在的文件時(shí)將清除原有的文件內(nèi)容,寫(xiě)入字符從文件首開(kāi)始。如需保留原有文件內(nèi)容,希望寫(xiě)入的字符以文件末開(kāi)始存放,必須以追加方式打開(kāi)文件。被寫(xiě)入的文件若不存在,則創(chuàng)建該文件。

2.?每寫(xiě)入一個(gè)字符,文件內(nèi)部位置指針向后移動(dòng)一個(gè)字節(jié)。

3.?fputc函數(shù)有一個(gè)返回值,如寫(xiě)入成功則返回寫(xiě)入的字符,?否則返回一個(gè)EOF。可用此來(lái)判斷寫(xiě)入是否成功。

[例10.2]從鍵盤(pán)輸入一行字符,寫(xiě)入一個(gè)文件,?再把該文件內(nèi)容讀出顯示在屏幕上。
#include
main()
{
FILE?*fp;
char?ch;
if((fp=fopen("string","wt+"))==NULL)
{
printf("Cannot?open?file?strike?any?key?exit!");
getch();
exit(1);
}
printf("input?a?string:\n");
ch=getchar();
while?(ch!='\n')
{
fputc(ch,fp);
ch=getchar();
}
rewind(fp);
ch=fgetc(fp);
while(ch!=EOF)
{
putchar(ch);
ch=fgetc(fp);
}
printf("\n");
fclose(fp);
}
  程序中第6行以讀寫(xiě)文本文件方式打開(kāi)文件string。程序第13行從鍵盤(pán)讀入一個(gè)字符后進(jìn)入循環(huán),當(dāng)讀入字符不為回車(chē)符時(shí),?則把該字符寫(xiě)入文件之中,然后繼續(xù)從鍵盤(pán)讀入下一字符。?每輸入一個(gè)字符,文件內(nèi)部位置指針向后移動(dòng)一個(gè)字節(jié)。寫(xiě)入完畢,?該指針已指向文件末。如要把文件從頭讀出,須把指針移向文件頭,?程序第19行rewind函數(shù)用于把fp所指文件的內(nèi)部位置指針移到文件頭。?第20至25行用于讀出文件中的一行內(nèi)容。

[例10.3]把命令行參數(shù)中的前一個(gè)文件名標(biāo)識(shí)的文件,?復(fù)制到后一個(gè)文件名標(biāo)識(shí)的文件中,?如命令行中只有一個(gè)文件名則把該文件寫(xiě)到標(biāo)準(zhǔn)輸出文件(顯示器)中。
 
 
 
 
4
C?的文件操作/TD>
 
#include
main(int?argc,char?*argv[])
{
FILE?*fp1,*fp2;
char?ch;
if(argc==1)
{
printf("have?not?enter?file?name?strike?any?key?exit");
getch();
exit(0);
}
if((fp1=fopen(argv[1],"rt"))==NULL)
{
printf("Cannot?open?%s\n",argv[1]);
getch();
exit(1);
}
if(argc==2)?fp2=stdout;
else?if((fp2=fopen(argv[2],"wt+"))==NULL)
{
printf("Cannot?open?%s\n",argv[1]);
getch();
exit(1);
}
while((ch=fgetc(fp1))!=EOF)
fputc(ch,fp2);
fclose(fp1);
fclose(fp2);
}
  本程序?yàn)閹⒌膍ain函數(shù)。程序中定義了兩個(gè)文件指針?fp1?和fp2,分別指向命令行參數(shù)中給出的文件。如命令行參數(shù)中沒(méi)有給出文件名,則給出提示信息。程序第18行表示如果只給出一個(gè)文件名,則使fp2指向標(biāo)準(zhǔn)輸出文件(即顯示器)。程序第25行至28行用循環(huán)語(yǔ)句逐個(gè)讀出文件1中的字符再送到文件2中。再次運(yùn)行時(shí),給出了一個(gè)文件名(由例10.2所建立的文件),?故輸出給標(biāo)準(zhǔn)輸出文件stdout,即在顯示器上顯示文件內(nèi)容。第三次運(yùn)行,給出了二個(gè)文件名,因此把string中的內(nèi)容讀出,寫(xiě)入到OK之中。可用DOS命令type顯示OK的內(nèi)容:字符串讀寫(xiě)函數(shù)fgets和fputs

一、讀字符串函數(shù)fgets函數(shù)的功能是從指定的文件中讀一個(gè)字符串到字符數(shù)組中,函數(shù)調(diào)用的形式為:?fgets(字符數(shù)組名,n,文件指針);?其中的n是一個(gè)正整數(shù)。表示從文件中讀出的字符串不超過(guò)?n-1個(gè)字符。在讀入的最后一個(gè)字符后加上串結(jié)束標(biāo)志'\0'。例如:fgets(str,n,fp);的意義是從fp所指的文件中讀出n-1個(gè)字符送入字符數(shù)組str中。
[例10.4]從e10_1.c文件中讀入一個(gè)含10個(gè)字符的字符串。
#include
main()
{
FILE?*fp;
char?str[11];
if((fp=fopen("e10_1.c","rt"))==NULL)
{
printf("Cannot?open?file?strike?any?key?exit!");
getch();
exit(1);
}
fgets(str,11,fp);
printf("%s",str);
fclose(fp);
}
  本例定義了一個(gè)字符數(shù)組str共11個(gè)字節(jié),在以讀文本文件方式打開(kāi)文件e101.c后,從中讀出10個(gè)字符送入str數(shù)組,在數(shù)組最后一個(gè)單元內(nèi)將加上'\0',然后在屏幕上顯示輸出str數(shù)組。輸出的十個(gè)字符正是例10.1程序的前十個(gè)字符。

  對(duì)fgets函數(shù)有兩點(diǎn)說(shuō)明:
1.?在讀出n-1個(gè)字符之前,如遇到了換行符或EOF,則讀出結(jié)束。
2.?fgets函數(shù)也有返回值,其返回值是字符數(shù)組的首地址。

二、寫(xiě)字符串函數(shù)fputs

fputs函數(shù)的功能是向指定的文件寫(xiě)入一個(gè)字符串,其調(diào)用形式為:?fputs(字符串,文件指針)?其中字符串可以是字符串常量,也可以是字符數(shù)組名,?或指針?變量,例如:
fputs(“abcd“,fp);
其意義是把字符串“abcd”寫(xiě)入fp所指的文件之中。[例10.5]在例10.2中建立的文件string中追加一個(gè)字符串。
#include
main()
{
FILE?*fp;
char?ch,st[20];
if((fp=fopen("string","at+"))==NULL)
{
printf("Cannot?open?file?strike?any?key?exit!");
getch();
exit(1);
}
printf("input?a?string:\n");
scanf("%s",st);
fputs(st,fp);
rewind(fp);
ch=fgetc(fp);
while(ch!=EOF)
{
putchar(ch);
ch=fgetc(fp);
}
printf("\n");
fclose(fp);
}
  本例要求在string文件末加寫(xiě)字符串,因此,在程序第6行以追加讀寫(xiě)文本文件的方式打開(kāi)文件string?。?然后輸入字符串,?并用fputs函數(shù)把該串寫(xiě)入文件string。在程序15行用rewind函數(shù)把文件內(nèi)部位置指針移到文件首。?再進(jìn)入循環(huán)逐個(gè)顯示當(dāng)前文件中的全部?jī)?nèi)容。

數(shù)據(jù)塊讀寫(xiě)函數(shù)fread和fwrite

  C語(yǔ)言還提供了用于整塊數(shù)據(jù)的讀寫(xiě)函數(shù)。?可用來(lái)讀寫(xiě)一組數(shù)據(jù),如一個(gè)數(shù)組元素,一個(gè)結(jié)構(gòu)變量的值等。讀數(shù)據(jù)塊函數(shù)調(diào)用的一般形式為:?fread(buffer,size,count,fp);?寫(xiě)數(shù)據(jù)塊函數(shù)調(diào)用的一般形式為:?fwrite(buffer,size,count,fp);?其中buffer是一個(gè)指針,在fread函數(shù)中,它表示存放輸入數(shù)據(jù)的首地址。在fwrite函數(shù)中,它表示存放輸出數(shù)據(jù)的首地址。?size?表示數(shù)據(jù)塊的字節(jié)數(shù)。count?表示要讀寫(xiě)的數(shù)據(jù)塊塊數(shù)。fp?表示文件指針。
 
 
  ??
 
5
C?的文件操作/TD>
 
例如:
fread(fa,4,5,fp);?其意義是從fp所指的文件中,每次讀4個(gè)字節(jié)(一個(gè)實(shí)數(shù))送入實(shí)數(shù)組fa中,連續(xù)讀5次,即讀5個(gè)實(shí)數(shù)到fa中。
[例10.6]從鍵盤(pán)輸入兩個(gè)學(xué)生數(shù)據(jù),寫(xiě)入一個(gè)文件中,?再讀出這兩個(gè)學(xué)生的數(shù)據(jù)顯示在屏幕上。
#include
struct?stu
{
char?name[10];
int?num;
int?age;
char?addr[15];
}boya[2],boyb[2],*pp,*qq;
main()
{
FILE?*fp;
char?ch;
int?i;
pp=boya;
qq=boyb;
if((fp=fopen("stu_list","wb+"))==NULL)
{
printf("Cannot?open?file?strike?any?key?exit!");
getch();
exit(1);
}
printf("\ninput?data\n");
for(i=0;i<2;i++,pp++)
scanf("%s%d%d%s",pp->name,&pp->num,&pp->age,pp->addr);
pp=boya;
fwrite(pp,sizeof(struct?stu),2,fp);
rewind(fp);
fread(qq,sizeof(struct?stu),2,fp);
printf("\n\nname\tnumber?age?addr\n");
for(i=0;i<2;i++,qq++)
printf("%s\t%5d%7d%s\n",qq->name,qq->num,qq->age,qq->addr);
fclose(fp);
}
  本例程序定義了一個(gè)結(jié)構(gòu)stu,說(shuō)明了兩個(gè)結(jié)構(gòu)數(shù)組boya和?boyb以及兩個(gè)結(jié)構(gòu)指針變量pp和qq。pp指向boya,qq指向boyb。程序第16行以讀寫(xiě)方式打開(kāi)二進(jìn)制文件“stu_list”,輸入二個(gè)學(xué)生數(shù)據(jù)之后,寫(xiě)入該文件中,?然后把文件內(nèi)部位置指針移到文件首,讀出兩塊學(xué)生數(shù)據(jù)后,在屏幕上顯示。

格式化讀寫(xiě)函數(shù)fscanf和fprintf

fscanf函數(shù),fprintf函數(shù)與前面使用的scanf和printf?函數(shù)的功能相似,都是格式化讀寫(xiě)函數(shù)。?兩者的區(qū)別在于?fscanf?函數(shù)和fprintf函數(shù)的讀寫(xiě)對(duì)象不是鍵盤(pán)和顯示器,而是磁盤(pán)文件。這兩個(gè)函數(shù)的調(diào)用格式為:?fscanf(文件指針,格式字符串,輸入表列);?fprintf(文件指針,格式字符串,輸出表列);?例如:
fscanf(fp,"%d%s",&i,s);
fprintf(fp,"%d%c",j,ch);?
用fscanf和fprintf函數(shù)也可以完成例10.6的問(wèn)題。修改后的程序如例10.7所示。
[例10.7]
#include
struct?stu
{
char?name[10];
int?num;
int?age;
char?addr[15];
}boya[2],boyb[2],*pp,*qq;
main()
{
FILE?*fp;
char?ch;
int?i;
pp=boya;
qq=boyb;
if((fp=fopen("stu_list","wb+"))==NULL)
{
printf("Cannot?open?file?strike?any?key?exit!");
getch();
exit(1);
}
printf("\ninput?data\n");
for(i=0;i<2;i++,pp++)
scanf("%s%d%d%s",pp->name,&pp->num,&pp->age,pp->addr);
pp=boya;
for(i=0;i<2;i++,pp++)
fprintf(fp,"%s?%d?%d?%s\n",pp->name,pp->num,pp->age,pp->
addr);
rewind(fp);
for(i=0;i<2;i++,qq++)
fscanf(fp,"%s?%d?%d?%s\n",qq->name,&qq->num,&qq->age,qq->addr);
printf("\n\nname\tnumber?age?addr\n");
qq=boyb;
for(i=0;i<2;i++,qq++)
printf("%s\t%5d?%7d?%s\n",qq->name,qq->num,?qq->age,
qq->addr);
fclose(fp);
}
  與例10.6相比,本程序中fscanf和fprintf函數(shù)每次只能讀寫(xiě)一個(gè)結(jié)構(gòu)數(shù)組元素,因此采用了循環(huán)語(yǔ)句來(lái)讀寫(xiě)全部數(shù)組元素。?還要注意指針變量pp,qq由于循環(huán)改變了它們的值,因此在程序的25和32行分別對(duì)它們重新賦予了數(shù)組的首地址。

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

  前面介紹的對(duì)文件的讀寫(xiě)方式都是順序讀寫(xiě),?即讀寫(xiě)文件只能從頭開(kāi)始,順序讀寫(xiě)各個(gè)數(shù)據(jù)。?但在實(shí)際問(wèn)題中常要求只讀寫(xiě)文件中某一指定的部分。?為了解決這個(gè)問(wèn)題可移動(dòng)文件內(nèi)部的位置指針到需要讀寫(xiě)的位置,再進(jìn)行讀寫(xiě),這種讀寫(xiě)稱為隨機(jī)讀寫(xiě)。?實(shí)現(xiàn)隨機(jī)讀寫(xiě)的關(guān)鍵是要按要求移動(dòng)位置指針,這稱為文件的定位。文件定位移動(dòng)文件內(nèi)部位置指針的函數(shù)主要有兩個(gè),?即?rewind?函數(shù)和fseek函數(shù)。

  rewind函數(shù)前面已多次使用過(guò),其調(diào)用形式為:?rewind(文件指針);?它的功能是把文件內(nèi)部的位置指針移到文件首。?下面主要介紹
fseek函數(shù)。

  fseek函數(shù)用來(lái)移動(dòng)文件內(nèi)部位置指針,其調(diào)用形式為:?fseek(文件指針,位移量,起始點(diǎn));?其中:“文件指針”指向被移動(dòng)的文件。?“位移量”表示移動(dòng)的字節(jié)數(shù),要求位移量是long型數(shù)據(jù),以便在文件長(zhǎng)度大于64KB?時(shí)不會(huì)出錯(cuò)。當(dāng)用常量表示位移量時(shí),要求加后綴“L”。“起始點(diǎn)”表示從何處開(kāi)始計(jì)算位移量,規(guī)定的起始點(diǎn)有三種:文件首,當(dāng)前位置和文件尾。
 
 
  ??
 
6
C?的文件操作/TD>
 
其表示方法如表10.2。?
起始點(diǎn)?   表示符號(hào)?   數(shù)字表示
——————————————————————————
文件首?   SEEK—SET    0
當(dāng)前位置?  SEEK—CUR    1
文件末尾?  SEEK—END?   ?2
例如:
fseek(fp,100L,0);其意義是把位置指針移到離文件首100個(gè)字節(jié)處。還要說(shuō)明的是fseek函數(shù)一般用于二進(jìn)制文件。在文本文件中由于要進(jìn)行轉(zhuǎn)換,故往往計(jì)算的位置會(huì)出現(xiàn)錯(cuò)誤。文件的隨機(jī)讀寫(xiě)在移動(dòng)位置指針之后,?即可用前面介紹的任一種讀寫(xiě)函數(shù)進(jìn)行讀寫(xiě)。由于一般是讀寫(xiě)一個(gè)數(shù)據(jù)據(jù)塊,因此常用fread和fwrite函數(shù)。下面用例題來(lái)說(shuō)明文件的隨機(jī)讀寫(xiě)。

[例10.8]在學(xué)生文件stu?list中讀出第二個(gè)學(xué)生的數(shù)據(jù)。
#include
struct?stu
{
char?name[10];
int?num;
int?age;
char?addr[15];
}boy,*qq;
main()
{
FILE?*fp;
char?ch;
int?i=1;
qq=&boy;
if((fp=fopen("stu_list","rb"))==NULL)
{
printf("Cannot?open?file?strike?any?key?exit!");
getch();
exit(1);
}
rewind(fp);
fseek(fp,i*sizeof(struct?stu),0);
fread(qq,sizeof(struct?stu),1,fp);
printf("\n\nname\tnumber?age?addr\n");
printf("%s\t%5d?%7d?%s\n",qq->name,qq->num,qq->age,
qq->addr);
}
  文件stu_list已由例10.6的程序建立,本程序用隨機(jī)讀出的方法讀出第二個(gè)學(xué)生的數(shù)據(jù)。程序中定義boy為stu類型變量,qq為指向boy的指針。以讀二進(jìn)制文件方式打開(kāi)文件,程序第22行移動(dòng)文件位置指針。其中的i值為1,表示從文件頭開(kāi)始,移動(dòng)一個(gè)stu類型的長(zhǎng)度,?然后再讀出的數(shù)據(jù)即為第二個(gè)學(xué)生的數(shù)據(jù)。

文件檢測(cè)函數(shù)

C語(yǔ)言中常用的文件檢測(cè)函數(shù)有以下幾個(gè)。
一、文件結(jié)束檢測(cè)函數(shù)feof函數(shù)調(diào)用格式:?feof(文件指針);?
功能:判斷文件是否處于文件結(jié)束位置,如文件結(jié)束,則返回值為1,否則為0。

二、讀寫(xiě)文件出錯(cuò)檢測(cè)函數(shù)ferror函數(shù)調(diào)用格式:?ferror(文件指針);?
功能:檢查文件在用各種輸入輸出函數(shù)進(jìn)行讀寫(xiě)時(shí)是否出錯(cuò)。?如ferror返回值為0表示未出錯(cuò),否則表示有錯(cuò)。

三、文件出錯(cuò)標(biāo)志和文件結(jié)束標(biāo)志置0函數(shù)clearerr函數(shù)調(diào)用格式:?clearerr(文件指針);?
功能:本函數(shù)用于清除出錯(cuò)標(biāo)志和文件結(jié)束標(biāo)志,使它們?yōu)?值。

C庫(kù)文件

C系統(tǒng)提供了豐富的系統(tǒng)文件,稱為庫(kù)文件,C的庫(kù)文件分為兩類,一類是擴(kuò)展名為".h"的文件,稱為頭文件,?在前面的包含命令中我們已多次使用過(guò)。在".h"文件中包含了常量定義、?類型定義、宏定義、函數(shù)原型以及各種編譯選擇設(shè)置等信息。另一類是函數(shù)庫(kù),包括了各種函數(shù)的目標(biāo)代碼,供用戶在程序中調(diào)用。?通常在程序中調(diào)用一個(gè)庫(kù)函數(shù)時(shí),要在調(diào)用之前包含該函數(shù)原型所在的".h"?文件。
在附錄中給出了全部庫(kù)函數(shù)。
ALLOC.H?   說(shuō)明內(nèi)存管理函數(shù)(分配、釋放等)。
ASSERT.H? ? 定義?assert調(diào)試宏。
BIOS.H?  ? 說(shuō)明調(diào)用IBM—PC?ROM?BIOS子程序的各個(gè)函數(shù)。
CONIO.H?   說(shuō)明調(diào)用DOS控制臺(tái)I/O子程序的各個(gè)函數(shù)。
CTYPE.H?   包含有關(guān)字符分類及轉(zhuǎn)換的名類信息(如?isalpha和toascii等)。
DIR.H?    包含有關(guān)目錄和路徑的結(jié)構(gòu)、宏定義和函數(shù)。
DOS.H?    定義和說(shuō)明MSDOS和8086調(diào)用的一些常量和函數(shù)。
ERRON.H?   定義錯(cuò)誤代碼的助記符。
FCNTL.H?   定義在與open庫(kù)子程序連接時(shí)的符號(hào)常量。
FLOAT.H?   包含有關(guān)浮點(diǎn)運(yùn)算的一些參數(shù)和函數(shù)。
GRAPHICS.H? ?說(shuō)明有關(guān)圖形功能的各個(gè)函數(shù),圖形錯(cuò)誤代碼的常量定義,正對(duì)不同驅(qū)動(dòng)程序的各種顏色值,及函數(shù)用到的一些特殊結(jié)構(gòu)。
IO.H?    ?包含低級(jí)I/O子程序的結(jié)構(gòu)和說(shuō)明。
LIMIT.H?   包含各環(huán)境參數(shù)、編譯時(shí)間限制、數(shù)的范圍等信息。
MATH.H?   ?說(shuō)明數(shù)學(xué)運(yùn)算函數(shù),還定了?HUGE?VAL?宏,?說(shuō)明了matherr和matherr子程序用到的特殊結(jié)構(gòu)。
MEM.H?    說(shuō)明一些內(nèi)存操作函數(shù)(其中大多數(shù)也在STRING.H?中說(shuō)明)。
PROCESS.H?  說(shuō)明進(jìn)程管理的各個(gè)函數(shù),spawn…和EXEC?…函數(shù)的結(jié)構(gòu)說(shuō)明。
SETJMP.H?  ?定義longjmp和setjmp函數(shù)用到的jmp?buf類型,?說(shuō)明這兩個(gè)函數(shù)。
SHARE.H?   定義文件共享函數(shù)的參數(shù)。
SIGNAL.H?  ?定義SIG[ZZ(Z]?[ZZ)]IGN和SIG[ZZ(Z]?[ZZ)]DFL常量,說(shuō)明rajse和signal兩個(gè)函數(shù)。
STDARG.H?  ?定義讀函數(shù)參數(shù)表的宏。(如vprintf,vscarf函數(shù))。
STDDEF.H?  ?定義一些公共數(shù)據(jù)類型和宏。
STDIO.H?   定義Kernighan和Ritchie在Unix?System?V?中定義的標(biāo)準(zhǔn)和擴(kuò)展的類型和宏。還定義標(biāo)準(zhǔn)I/O?預(yù)定義流:stdin,stdout和stderr,說(shuō)明?I/O流子程序。
STDLIB.H?  ?說(shuō)明一些常用的子程序:轉(zhuǎn)換子程序、搜索/?排序子程序等。
STRING.H?  ?說(shuō)明一些串操作和內(nèi)存操作函數(shù)。
SYS\STAT.H? ?定義在打開(kāi)和創(chuàng)建文件時(shí)用到的一些符號(hào)常量。
SYS\TYPES.H? 說(shuō)明ftime函數(shù)和timeb結(jié)構(gòu)。
SYS\TIME.H? ?定義時(shí)間的類型time[ZZ(Z]?[ZZ)]t。
TIME.H?   ?定義時(shí)間轉(zhuǎn)換子程序asctime、localtime和gmtime的結(jié)構(gòu),ctime、?difftime、?gmtime、?localtime和stime用到的類型,并提供這些函數(shù)的原型。
VALUE.H?   定義一些重要常量,?包括依賴于機(jī)器硬件的和為與Unix?System?V相兼容而說(shuō)明的一些常量,包括浮點(diǎn)和雙精度值的范圍。

posted on 2006-09-06 10:08 啤酒 閱讀(899) 評(píng)論(0)  編輯 收藏 引用


只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


導(dǎo)航

統(tǒng)計(jì)

常用鏈接

留言簿(2)

隨筆檔案

收藏夾

搜索

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国模大胆一区二区三区| 亚洲女性裸体视频| 亚洲免费成人| 欧美日韩一区二区三区四区在线观看| 亚洲精品视频免费| 亚洲欧美日本在线| 狠狠色狠狠色综合人人| 欧美h视频在线| 一本大道久久a久久精品综合| 午夜欧美电影在线观看| 好看的日韩视频| 欧美精品一区二区三区一线天视频| 亚洲最黄网站| 久久亚洲国产成人| 一区二区三区成人精品| 国产精品一二三视频| 久久亚洲影音av资源网| 日韩一二三区视频| 鲁大师影院一区二区三区| 99re这里只有精品6| 国产丝袜美腿一区二区三区| 男女激情久久| 亚洲女同性videos| 亚洲激情综合| 久久精品一区二区国产| 亚洲免费精品| 国产伊人精品| 欧美日韩在线精品| 久久久综合视频| 亚洲一区二区三区三| 欧美国产精品v| 欧美在线视频日韩| 日韩图片一区| 精品91久久久久| 国产精品高潮呻吟久久av黑人| 久久精品人人做人人爽电影蜜月| 日韩视频亚洲视频| 欧美成ee人免费视频| 欧美一区午夜精品| 在线一区二区三区四区五区| 在线欧美视频| 国产亚洲激情| 国产精品盗摄久久久| 免费一级欧美片在线播放| 欧美一区二区精品在线| 亚洲少妇最新在线视频| 亚洲国产欧美一区二区三区久久 | 亚洲一区二区免费视频| 亚洲高清二区| 久久人91精品久久久久久不卡| 正在播放欧美一区| 亚洲欧洲偷拍精品| 黄色一区二区三区四区| 国产欧美视频在线观看| 国产精品第2页| 欧美日韩一区二区视频在线| 欧美国产日韩亚洲一区| 久久青草福利网站| 久久精品99国产精品| 午夜精品剧场| 亚洲欧美美女| 性感少妇一区| 午夜国产欧美理论在线播放| 一本色道久久综合亚洲精品不卡| 91久久中文| 亚洲人成在线观看| 亚洲人成亚洲人成在线观看图片| 亚洲大片av| 亚洲黄色免费| 亚洲精品自在在线观看| 亚洲人成人99网站| 亚洲欧洲日本国产| 亚洲人成亚洲人成在线观看| 亚洲欧洲中文日韩久久av乱码| 亚洲国产精品毛片| 亚洲日本黄色| 99精品福利视频| 一区二区不卡在线视频 午夜欧美不卡在| 最新中文字幕一区二区三区| 亚洲精品中文字幕在线| 夜夜夜精品看看| 亚洲欧美国产另类| 欧美在线视频一区| 久久亚洲精品一区| 欧美福利网址| 欧美婷婷久久| 国产日韩在线看片| 亚洲福利在线视频| 一区二区精品国产| 性久久久久久久久久久久| 久久久av水蜜桃| 欧美高清在线播放| 亚洲美女视频网| 亚洲综合导航| 久久亚洲精品视频| 欧美日韩国产亚洲一区| 国产欧美日韩不卡| 激情五月婷婷综合| 亚洲美女精品一区| 亚洲欧美综合一区| 蜜桃视频一区| 日韩视频一区二区三区在线播放免费观看| 一区二区精品在线| 久久国产99| 欧美另类人妖| 国产午夜精品全部视频在线播放| 尤物网精品视频| 亚洲午夜极品| 久久米奇亚洲| 日韩一区二区福利| 久久国产精品亚洲va麻豆| 欧美激情一区二区三区在线视频观看| 国产精品二区在线观看| 国内免费精品永久在线视频| 日韩视频中文| 久久久久久自在自线| 亚洲免费不卡| 久久中文字幕一区二区三区| 欧美午夜激情小视频| 在线成人av.com| 午夜精品久久久久久久久久久久 | 一区二区欧美日韩视频| 久久精品国产99| 亚洲精品中文字| 久久漫画官网| 国产欧美在线视频| 中文欧美日韩| 欧美大胆a视频| 欧美一区二区三区喷汁尤物| 欧美日韩免费高清| 亚洲国产老妈| 久久久久se| 亚洲一区二区成人| 欧美日韩国产综合视频在线| 在线观看国产精品淫| 欧美一级大片在线观看| 亚洲区第一页| 欧美**人妖| 在线精品视频在线观看高清| 欧美一级视频一区二区| 99精品黄色片免费大全| 欧美黑人多人双交| 亚洲电影网站| 老司机免费视频一区二区| 亚洲自啪免费| 国产精品草草| 亚洲系列中文字幕| 欧美黄色一级视频| 久久久久久伊人| 红桃视频欧美| 久久男人资源视频| 午夜国产精品视频免费体验区| 欧美日韩日日骚| 一区二区冒白浆视频| 最新国产拍偷乱拍精品| 欧美风情在线观看| 亚洲巨乳在线| 最新精品在线| 欧美精品在线视频观看| 亚洲免费久久| 亚洲精品久久久久久久久久久久久 | 亚洲理论在线观看| 欧美国产欧美综合 | 亚洲精品少妇30p| 欧美精品亚洲精品| 日韩一区二区电影网| 最新日韩av| 欧美日韩国产综合视频在线观看中文 | 久久综合狠狠综合久久激情| 在线欧美视频| 亚洲福利久久| 欧美精品激情在线观看| aⅴ色国产欧美| 一区二区三区欧美| 国产精品羞羞答答| 久久久亚洲人| 久久亚洲影音av资源网| 亚洲精品日韩一| aaa亚洲精品一二三区| 国产精品入口麻豆原神| 欧美自拍偷拍午夜视频| 欧美一区二区精品在线| 在线播放国产一区中文字幕剧情欧美| 欧美aa在线视频| 欧美日韩亚洲91| 久久se精品一区二区| 久久久水蜜桃| 亚洲最快最全在线视频| 亚洲一区二区影院| 影音先锋久久久| 亚洲精品视频在线| 国产精品麻豆成人av电影艾秋| 久久精品人人做人人爽电影蜜月 | 99天天综合性| 亚洲性线免费观看视频成熟| 国产欧美日韩专区发布| 欧美国产先锋| 国产精品国产三级欧美二区 | 国产午夜精品一区二区三区视频 | 亚洲精品美女久久7777777|