C語言程序設計項目式教程:文件操作_第1頁
C語言程序設計項目式教程:文件操作_第2頁
C語言程序設計項目式教程:文件操作_第3頁
C語言程序設計項目式教程:文件操作_第4頁
C語言程序設計項目式教程:文件操作_第5頁
已閱讀5頁,還剩74頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

文件操作C語言程序設計任務驅動式教程導學C程序如何從文本文件讀取數據呢??文件基本知識任務一1、文件文件程序文件源程序文件(.c)目標文件(.obj)數據文件供程序運行時讀寫的數據可執(zhí)行文件(.exe)文件基本知識任務一所謂“文件”一般指存儲在外部介質上數據的集合。操作系統(tǒng)是以文件為單位對數據進行管理的,如果想找存放在外部介質上的數據,必須先按文件名找到所指定的文件,然后再從該文件中讀取數據。要向外部介質上存儲數據也必須先建立一個文件(以文件名作為標志),才能向它輸出數據。1、什么是文件?文件基本知識任務一2、文件名一個文件要有一個唯一的文件標識,以便用戶識別和引用。文件標識包括3部分:(1)文件路徑

文件在外部存儲設備中的位置。(2)文件名主干

是遵循命名規(guī)則標識符的命名規(guī)則。(3)文件后綴

用來表示文件的性質。文件基本知識任務一如:表示file1.dat文件存放在D盤中的CC目錄下的temp子目錄下面。

D:\CC\temp\file1.dat

文件路徑文件主干名文件后綴2、文件名3、文件的分類數據文件數據的組織形式ASCⅡ文本/文本文件二進制文件/映像文件文件基本知識任務一ASCⅡ形式文件的特點:便于對字符逐個處理便于輸出字符占據存儲空間大轉換需要時間二進制形式文件的特點:節(jié)省存儲空間。節(jié)省轉換時間2、文件的分類文件基本知識任務一3、緩沖文件系統(tǒng)緩沖文件系統(tǒng):系統(tǒng)自動地在內存區(qū)為程序中每一個正在使用的文件開辟一個文件緩沖區(qū)文件基本知識任務一3、緩沖文件系統(tǒng)文件基本知識任務一4、文件類型指針文件基本知識任務一例如有一種c編譯環(huán)境提供的stdio.h頭文件中有以下的文件類型聲明:typedefstruct

{shortlevel;//緩沖區(qū)“滿”或“空”的程度。

unsignedflags;//文件狀態(tài)標志charfd;//文件描述符

unsignedcharhold;//如緩沖區(qū)無內容不讀取字符

shortbsize;//緩沖區(qū)的大小

unsignedchar*buffer;//數據緩沖區(qū)的位置

unsignedchar*curp;//文件位置標記指針當前的指向

unsignedistemp;//臨時文件指示器

shorttoken;//用于有效性檢查

}FILE;一種C編譯環(huán)境供的stdio.h頭文件中有以下的文件類型聲明4、文件類型指針文件基本知識任務一FILE*fp;//定義一個指向FILE類型數據的指針變量4、文件類型指針文件基本知識任務一FILE*fp;//定義一個指向FILE類型數據的指針變量4、文件類型指針文件基本知識任務一FILE*fp;//定義一個指向FILE類型數據的指針變量注意:指向文件的指針變量并不是指向外部介質上的數據文件的開頭,而是指向內存中的文件信息區(qū)的開頭。4、文件類型指針學習總結答一答1、什么是文件?2、什么是文件名?3、什么是緩沖文件系統(tǒng)?4、什么是文件類型指針?任務一文件基本知識感謝觀看!文件操作C語言程序設計任務驅動式教程導學C程序如何打開和關閉文件呢??文件的打開與關閉任務二打開文件:為文件建立相應的信息區(qū)和文件緩沖區(qū)信息區(qū):用來存放有關文件的信息緩沖區(qū):用來暫時時存放輸入輸出的數據讀寫文件關閉文件用1、文件的打開與關閉文件的打開與關閉任務二打開文件:為文件建立相應的信息區(qū)和文件緩沖區(qū)讀寫文件關閉文件用:撤銷文件信息區(qū)和文件緩沖區(qū)1、文件的打開與關閉文件的打開與關閉任務二用fopen函數打開數據文件:

fopen(文件名,使用文件方式);例如:FILE*fp;

fp=fopen(“a1”,”r”);

“a1”:表示要打開文件的名字為a1

“r”:read,就是使用文件方式為“讀入”

函數返回值:指向文件的指針變量1、文件的打開與關閉文件的打開與關閉任務二用fopen函數打開數據文件:

fopen(文件名,使用文件方式);

FILE*fp;

fp=fopen(“a1”,”r”);完整的寫法:定義一個指向文件的指針變量fp,將fopen函數的返回值賦給指針變量fp,然后再用fopen函數去打開文件,并將返回值賦給指針變量fp,這樣fp就和文件a1相聯(lián)系起來了,即fp指向了a1文件。1、文件的打開與關閉文件的打開與關閉任務二在打開一個文件時,要通知編譯系統(tǒng)3個信息:需要打開的文件的名字即準備訪問的文件名字。使用文件的方式——讀/寫讓指針變量指向打開的文件1、文件的打開與關閉用fopen函數打開數據文件:fopen(文件名,使用文件方式);文件的打開與關閉任務二文件的打開使用方式文件的打開與關閉任務二不能打開文件,F(xiàn)open函數返回值NULL(空指針)原因:用“r”方式打開一個不存在的文件磁盤故障磁盤已滿,無法建立新文件……if((fp=fopen("file”,”r”))==NULL){printf("cannotopenthisfile\n‘);

exit(0);}通常采用下面的方法來打開文件:文件的打開與關閉任務二換行的處理:C語言‘\n’表示換行Windows系統(tǒng)‘\r’(回車)和‘\n’(換行)一起使用表示換行用fopen函數打開數據文件:fopen(文件名,使用文件方式);“w”方式打開轉換文件的打開與關閉任務二換行的處理:C語言‘\n’表示換行Windows系統(tǒng)‘\r’(回車)和‘\n’(換行)一起使用表示換行用fopen函數打開數據文件:fopen(文件名,使用文件方式);“r”方式打開轉換文件的打開與關閉任務二換行的處理:C語言‘\n’表示換行Windows系統(tǒng)‘\r’(回車)和‘\n’(換行)一起使用表示換行用fopen函數打開數據文件:fopen(文件名,使用文件方式);加b打開二進制文件,不轉換文件的打開與關閉任務二輸出數據形式由讀寫語句決定:fscanf和fprintf:按ASCⅡ方式輸入輸出freadfwrite:按二進制方式輸入輸出用fopen函數打開數據文件:fopen(文件名,使用文件方式);文件的打開與關閉任務二標準流文件:標準輸入流終端標準輸出流終端標準出錯輸出流(當程序出錯時)終端系統(tǒng)自動打開用fopen函數打開數據文件:fopen(文件名,使用文件方式);文件的打開與關閉任務二用fclose函數關閉數據文件:fclose(文件指針);如:fclose(fp);如果不關閉文件就結束程序運行將會丟失數據。學習總結答一答1、簡要說明文件的打開與關閉方式?任務二文件的打開與關閉感謝觀看!文件的操作C語言程序設計任務驅動式教程導學C程序如何向文件讀寫一個字符呢??文件的順序讀寫任務三讀寫一個字符的函數:1、怎樣向文件讀寫字符函數名調用形式功能返回值fgetcfgetc(fp)從fp指向的文件讀入一個字符讀成功,帶回所讀的字符,失敗返回文件結束標志EOF(即-1)fputcfputc(ch,fp)把字符ch寫到文件指針變量fp所指向的文件中輸出成功,返回值就是輸出的字符;輸出失敗,則返回EOF(即-1)文件的順序讀寫任務三例:從鍵盤輸入一些字符,并逐個把它們送到磁盤上去,直到用戶輸入一個“#”為止。用getchar函數接收從鍵盤逐個輸入的字符用fputc函數逐個字符寫入磁盤文件。文件的順序讀寫任務三#include<stdio.h>#include<stdlib.h>intmain(){FILE*fp;//定義文件指針變量fpcharch,filename[10];printf("請輸入所用的文件名:");scanf("%s",filename);//輸入相應的文件名

getchar();//消化最后輸入的回車符

if((fp=fopen(filename,"w"))==NULL)//打開輸出文件并使fp指向這個文件

{printf("cannotopenfile\n");//如果打開出錯就輸出“打不開”

exit(0);//終止程序

}程序代碼:文件的順序讀寫任務三printf("請入一個準備存儲到磁盤的字符串(以#結束):");ch=getchar();//接收從鍵盤輸入的第一個字符while(ch!='#')//判斷ch的值是否為#,輸入#時結束循環(huán){fputc(ch,fp);//向磁盤文件輸出一個字符

putchar(ch);//將輸出的字符顯示在屏幕上

ch=getchar();//再接收從鍵盤輸入的一個字符

}fclose(fp);//關閉文件

putchar(10);//向屏幕輸出一個換行符

return0;}如果文件執(zhí)行是正確的,就執(zhí)行下面的語句:文件的順序讀寫任務三例:將一個磁盤文件中的信息復制到另一個磁盤文件中。今要求將上例建立的file1.dat文件中的內容復制到另一個磁盤文件file2.dat中。本程序采用:從file1.dat文件中逐個讀入字符(fgetc函數),再逐個字符輸出到file2.dat文件中(fputc函數)文件的順序讀寫任務三#include<stdio.h>#include<stdlib.h>intmain(){FILE*in,*out;//定義指向file類型文件指針變量in和outcharch,infile[10],outfile[10];

//定義兩個字符數組,分別存放兩個數據文件名

printf(“請輸入讀入文件名:");scanf(“%s”,infile);//輸入輸入文件名

printf(“請輸入輸出文件名:");scanf(“%s”,outfile);//輸入輸出文件名

if((in=fopen(infile,“r"))==NULL)//打開輸出文件并使in指向這個文件

{printf("cannotopenfile\n");//如果打開出錯就輸出“打不開”

exit(0);//終止程序

}程序代碼:文件的順序讀寫任務三

if((in=fopen(outfile,“w"))==NULL)//打開輸出文件并使iout指向這個文件

{printf("cannotopenfile\n");//如果打開出錯就輸出“打不開”

exit(0);//終止程序

}ch=fgetc(in);//從輸入文件讀入一個字符,賦給變量chwhile(!feof(in))//如果未遇到輸入文件的結束標志,就執(zhí)行循環(huán){fputc(ch,out);//將ch寫到輸出文件

putchar(ch);//將ch顯示在屏幕上

ch=fgetc(in);//再從輸入文件讀入一個字符,賦給變量ch

}putchar(10);//向屏幕輸出一個換行符

fclose(in);//關閉輸入文件

fclose(out);//關閉輸出文件

return0;}如果文件執(zhí)行是正確的,就執(zhí)行下面的語句:文件的順序讀寫任務三說明:1、在訪問磁盤文件時,是逐個字符(字節(jié))進行的,為了知道當前訪問到第幾個字節(jié),系統(tǒng)用“文件讀寫位置標記”來表示當前所訪問的位置。2、開始時文件讀寫位置標記是指向第一個字節(jié)的,每訪問完一個字節(jié)后,當前的讀寫位置就會指向下一個字節(jié),也就是當前的讀寫位置會自動向下移動。3、為了知道對文件的讀寫是否完成,只需要看文件讀寫位置,是否移動到了文件的末尾。在文件的所有有效字符后,都有一個文件尾標志,文件尾標志用標識符EOF來表示的,

EOF在stdio.h頭文件中被定義為-1.4、用feof函數檢測是否讀到文件尾,是-函數返回值1,否-函數返回值0.文件的順序讀寫任務三說明:5、如果程序中改用while(ch!=EOF)來判斷是否到達文件尾也是可以的,程序的運行結果同樣可以在windows資源管理器中用記事本來打開這兩個文件查看。6、這個程序是按照文本文件方式進行處理的,也可以用此程序來復制一個二進制的文件,只需要將兩個fopen函數中的r改成rb,w改成wb即可。7、C系統(tǒng)已經在stdio.h這個頭文件當中把fputc和fgetc這兩個函數定義為宏名putc和getc,因此,在程序當中使用fputc和putc是一樣的,

fgetc

和getc的作用也是一樣的。stdio.h#defineputc(ch,fp)

fputc(ch,fp)#definegetc(fp)

fgetc(fp)學習總結答一答1、怎樣向文件讀寫字符?任務三文件的順序讀寫感謝觀看!文件的操作C語言程序設計任務驅動式教程導學C程序如何從文件中讀寫一個字符串呢??文件的順序讀寫------一個字符串任務六讀寫一個字符串的函數:2、怎樣向文件讀寫字符串函數名調用形式功能返回值fgetsfgets(str,n,fp)從fp指向的文件讀入一個長度為(n-1)的字符串,存放到字符數組str中讀成功,返回地址str,失敗則返回NULLfputsfputs(str,fp)把str所指向的字符串寫到文件指針變量fp所指向的文件中輸出成功,返回0;否則返回非0值fgets函數的函數原型為:char*fgets(char*str,intn,FILE*fp);//從文件讀入一個字符串調用時可以寫成:fgets(str,n,fp);文件的順序讀寫任務六讀寫一個字符串的函數:2、怎樣向文件讀寫字符串調用時可以寫成:fgets(str,n,fp);str:字符數組n:就是要求得到的字符的個數,實際上只從fp所指向的文件當中讀入n-1個字符,然后在最后去加上一個在\0字符,這樣得到的字符串共有n個字符.文件的順序讀寫任務三讀寫一個字符串的函數:2、怎樣向文件讀寫字符串函數名調用形式功能返回值fgetsfgets(str,n,fp)從fp指向的文件讀入一個長度為(n-1)的字符串,存放到字符數組str中讀成功,返回地址str,失敗則返回NULLfputsfputs(str,fp)把str所指向的字符串寫到文件指針變量fp所指向的文件中輸出成功,返回0;否則返回非0值fputs函數的函數原型為:int*fputs(char*str,FILE*fp);//將str所指向的字符串輸出到fp所指向的文件當中調用時可以寫成:fputs(”China”,fp);文件的順序讀寫任務六2、怎樣向文件讀寫字符串fgets和fputs:以文件為讀寫對象類似于gets和puts:以終端為讀寫對象文件的順序讀寫任務三2、怎樣向文件讀寫字符串例:從鍵盤讀入若干個字符串,對它們按字母大小的順序排序,然后把排好序的字符串送到磁盤文件中保存。程序通過三個步驟完成:①從鍵盤讀入n個字符串

②字符串排序

③輸出CHINACANADAINDIA文件的順序讀寫任務二#include<stdio.h>#include<stdlib.h>intmain(){FILE*fp;//定義指向file類型文件指針變量fpcharstr[3][10],temp[10];

//str是用來存放字符串的二維數組,temp是臨時數組inti,j,k,n=3;

printf(“Enterstrings:\n”);

//提示輸入字符串

for(i=0;i<n;i++)

gets(str[i]);

//輸入字符串

for(i=0;i<n-1;i++)//用選擇法對字符串排序

{

k=i;

for(j=i+1;j<n;j++)

if((strcmp(str[k],str[j])>0)k=j;

if(k!=i)

{strcpy(temp,str[i]);strcpy(str[i],str[k]);

strcpy(str[k],temp);}}程序代碼:文件的順序讀寫任務二

if((fp=fopen(“D:\\CC\\string.dat”,“w”))==NULL)//打開磁盤文件

//‘\’為轉義字符的標志,因此在字符串中要表示’\’用’\\’

{printf("cannotopenfile!\n");//如果打開出錯就輸出“打不開”

exit(0);//終止程序

}

printf(“\nThenewsequence:\n”);for(i=0;i<n;i++){fputs(str[i],fp);fputs(“\n”,fp);

//向磁盤文件寫一個字符串,然后輸出一個換行符。printf(“%s\n”,str[i]);//在屏幕上顯示

}return0;}文件的順序讀寫任務三例:#include<stdio.h>#include<stdlib.h>intmain(){FILE*fp;//定義指向file類型文件指針變量fpcharstr[3][10];

//str是用來存放字符串的二維數組,temp是臨時數組inti=0;if((fp=fopen(“D:\\CC\\string.dat”,“r”))==NULL)//打開磁盤文件

//‘\’為轉義字符的標志,因此在字符串中要表示’\’用’\\’{printf("cannotopenfile!\n");//如果打開出錯就輸出“打不開”

exit(0);//終止程序

}while(fgets(str[i],10,fp)!=NULL)

printf(“%s”,str[i]);

i++;}

fclose(fp);

return0;}文件的順序讀寫

任務六fprintf函數和fscanf函數3、怎樣用格式化的方式讀寫文本文件函數名讀寫對象作用相識,格式化讀寫函數fprintf、fscanf文件printf、scanf終端fprintf(文件指針,格式字符串,輸出表列);fscanf(文件指針,格式字符串,輸出表列);文件的順序讀寫

任務六fprintf(fp,”%d,%6.2f”,i,f);3、怎樣用格式化的方式讀寫文本文件//將int型變量i和float型變量f的值按%d和%6.2f的格式輸出到fp指向的文件中fscanf(fp,”%d,%f”,&i,&f);//磁盤文件上如果有字符”3,4.5”,則從中讀取整數3送給整型變量i。讀取實數4.5送給float型變量f。文件的順序讀寫

任務六fprintf函數和fscanf函數3、怎樣用格式化的方式讀寫文本文件優(yōu)點:對磁盤文件讀寫方便,容易理解缺點:輸入時,ASCⅡ碼二進制形式

輸出時,二進制形式AcyⅡ碼注:在內存與磁盤頻繁交換數據的情況下,最好不用fprintf函數和fscanf函數,可以使用fread和fwrite函數來進行二進制讀寫。文件的順序讀寫

任務六用二進制方式向文件讀寫

——一組數據3、怎樣用格式化的方式讀寫文本文件Fread函數:從文件中讀取一個數據塊fwrite函數:向文件寫入一個數據塊fread(buffer,size,count,fp);

buffer:一個地址.用來存放從文件讀入的數據的存儲區(qū)的地址size:要讀寫的字節(jié)數

count:要讀寫多少個數據項fp:file類型指針fwrite(buffer,size,count,fp);把從此地址開始的存儲區(qū)中的數據向文件輸出在打開文件時指定用二進制文件,這樣就可以用fread和fwrite函數讀寫任何類型的信息。文件的順序讀寫

任務六Floatf[10];\\先定義一個包含10個元素的float類型的數組f。然后用fread(f,4,10,fp);//從fp所指向的文件讀入10個4個字節(jié)的數據存儲到數組f中。fread和fwrite返回值為int類型,執(zhí)行成功返回形參count的值(一個整數),即輸入/輸出數據項的個數。3、怎樣用格式化的方式讀寫文本文件學習總結答一答1、怎樣向文件讀寫字符?2、什么是文件名?3、什么是緩沖文件系統(tǒng)?4、什么是文件類型指針?任務三文件的順序讀寫感謝觀看!文件的操作C語言程序設計任務驅動式教程導學文件的順序讀寫比較容易操作的,但是效率不是很高,那么有沒有什么功效的操作方式呢??

文件的隨機讀寫任務四1.文件位置標記為了對讀寫進行控制,系統(tǒng)為每個文件設置了一個文件讀寫位置標記(簡稱文件位置標記或文件標記),用來指示“接下來要讀寫的下一個字符的位置”。一、文件位置標記及其定位文件的隨機讀寫任務四1.文件位置標記在對字符文件進行順序讀寫時,文件位置標記指向文件開頭,這時如果對文件進行讀/寫的操作,就讀/寫完第1個字符后,文件位置標記順序向后移一個位置,在下一次執(zhí)行讀/寫操作時,就將位置標記指向的第2個字符進行讀出或寫入。依此類推,直到遇文件尾,此時文件位置標記在最后一個數據之后。文件的隨機讀寫任務四對流式文件既可以進行順序讀寫,也可以進行隨機讀寫。關鍵在于控制文件的位置標記。如果文件位置標記是按字節(jié)位置順序移動的,就是順序讀寫。如果能將文件位置標記按需要移動到任意位置,就可以實現(xiàn)隨機讀寫。1.文件位置標記文件的隨機讀寫任務四1.文件位置標記所謂隨機讀寫,是指讀寫完上一個字符(字節(jié))后,并不一定要讀寫其后續(xù)的字符(字節(jié)),而可以讀寫文件中任意位置上所需要的字或者是(字節(jié))。即文件讀寫數據的順序和數據在文件中的物理順序一般是不一致的??梢栽谌魏挝恢脤懭霐祿谌魏挝恢米x取數據。文件的隨機讀寫任務四2.文件位置標記的定位可以強制使文件位置標記指向人們指定的位置(1)用rewind函數使文件位置標記指向文件開頭rewind(文件指針);rewind函數的作用是使文件位置標記重新返回文件的開頭,此函數沒有返回值。例:有一個磁盤文件,內有一些信息。要求第1次將它的內容顯示在屏幕上,第2次把它復制到另一文件上。文件的隨機讀寫任務四#include<stdio.h>intmain(){FILE*fp1,*fp2;//定義指向file類型文件指針變量charch;

fp1=fopen(“file1.dat”,”r”);

//打開輸入文件

fp2=fopen(“file2.dat”,”w”);//打開輸出文件

ch=getc(fp1);

//從file1.dat文件讀入第一個字符

while(!feof(fp1))//當未讀取文件尾標志

{

putchar(ch);//在屏幕輸出一個字符

ch=getc(fp1);//再從file1.dat文件讀入一個字符}

putchar(10);//在屏幕執(zhí)行換行

程序代碼:文件的隨機讀寫任務四

putchar(10);//在屏幕執(zhí)行換行

rewind(fp1);//使文件位置標記返回文件開頭ch=getc(fp1);//從file1.dat文件讀入第一個字符

while(!feof(fp1))//當未讀取文件尾標志

{

fputc(ch

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論