c中檔案的讀取操作
「檔案(file)」:所謂「檔案」是指一組相關資料的有序集合。資料以檔案的形式存放在外部介質(一般是磁碟、磁帶、光碟等)上,作業系統中是以檔案為單位對資料進行管理的,以檔名作為訪問檔案的標識。
c語言把檔案看作乙個位元組序列,即由一連串的位元組組成。根據檔案中的資料組織形式,資料檔案可分為ascii碼檔案和二進位制檔案。ascii碼檔案,又稱為「文字檔案」(text),其每乙個位元組存放乙個ascii碼。二進位制檔案,把記憶體中的資料按其在記憶體中的儲存形式存放在磁碟上。
如:十進位制整數10000,在記憶體中佔兩個位元組,其存放形式是:00100111,00010000。在二進位制檔案中也按這種方式存放。但是,在ascii檔案中,十進位制整數10000存放為31h、30h、30h、30h、30h,佔五個位元組,它們分別是1、0、0、0、0、0字母的ascii碼。
c中檔案的讀取,只有通過檔案指標,才能呼叫相應的檔案。檔案操作的過程:對磁碟檔案的操作必須「先開啟,後讀取,最後關閉」。
下面就是利用檔案指標,開啟乙個檔案,以唯讀的開啟方式。
file * fp;
fp = fopen("d://1","r");
下面分析下fopen函式中的第二個引數使用檔案方式的類別,
使用檔案方式 含義
"r"(唯讀)
為輸入開啟乙個文字檔案
"w"(只寫)
為輸出開啟乙個文字檔案
"a"(追加)
為追加開啟乙個文字檔案
"rb"(唯讀)
為輸入開啟乙個二進位制檔案
"wb"(只寫)
為輸出開啟乙個二進位制檔案
"ab"(追加)
為追加開啟乙個二進位制檔案
"r+"(讀寫)
為讀/寫開啟乙個文字檔案
"w+"(讀寫)
為讀/寫建立乙個文字檔案
"a+"(讀寫)
為讀/寫開啟乙個文字檔案
"rb+"(讀寫)
為讀/寫開啟乙個二進位制檔案
"wb+"(讀寫)
為讀/寫建立乙個二進位制檔案
"ab+"(讀寫)
為讀/寫開啟乙個二進位制檔案
注釋:
1、若使用檔案方式為「a」,表示向檔案尾新增新資料(不刪除原有資料),但要求此時檔案必須存在,否則出錯,但是我在是vs2010中除錯,檔案不存在,會自動建立乙個檔案,不會報錯,此外只能向檔案寫資料不能讀取檔案中的資料。若使用檔案方式為「a+」,表示向檔案尾新增新資料(不刪除原有資料),檔案不存在,會自動建立乙個檔案,不會報錯,另外使用這種檔案方式,開啟的檔案即可以用來輸入資料,也可以用來輸出資料。
2、用"w"方式開啟的檔案只能用於向該檔案寫資料。如果原來不存在該檔案,則在開啟時新建乙個檔案,如果該檔案存在,則先刪除該檔案(其中的資料肯定刪除了),然後重新建立乙個新檔案。
3、若使用檔案方式為「w+」和「w」,如果原來不存在該檔案,則在開啟時新建乙個檔案,如果該檔案存在,則先刪除該檔案(其中的資料肯定刪除了),然後重新建立乙個新檔案。
4、若使用檔案方式為「r+",
該檔案必須存在,向檔案中寫入資料的時候,不會先刪除該檔案,而是直接覆蓋,能覆蓋多少就覆蓋多少,覆蓋不了的先前資料仍然存在檔案中。
使用檔案方式為「r+」,向檔案中存入資料:
int main(void)
char str ="he fei wo yao liu xia1";
int len = strlen(str);
for(int i = 0; i < len;i++)
fclose(fp);
return 0;
}
使用檔案方式為「r+」,從檔案中讀出資料
int main(void)
char ch = fgetc(fp);
while(ch != eof)//從文字檔案中讀取資料
fclose(fp);
return 0;
}
對於文字檔案,遇檔案尾時返回檔案結束標誌eof。對於二進位制檔案,用feof(fp) 判別是否遇檔案尾,feof(fp)=1說明遇檔案尾。
從文字檔案中順序讀入檔案內容,並在螢幕上顯示出來,可以用:
ch = fgetc(fp);
while(ch != eof)
從二進位制檔案中順序讀入檔案內容,可以用:
while(!feof(fp))
如果在檔案中寫入資料,如果沒有關閉就直接讀取檔案中的內容,就會出現錯誤-寫好檔案後,沒有關閉,那麼檔案指標在最後乙個位置,那你在讀的時候肯定就是從末尾啊,所以是隨機字元,這樣會出現亂碼。如何糾正,等檔案寫完資料後,首先關閉檔案,再讀取檔案,即可,如下
fclose(fp);
fp = fopen("d://1","r+");
下面介紹讀寫字串函式:fgets和fputs:
1、讀字串函式fgets函式
功能:從指定的檔案中讀乙個字串到字元陣列中,函式呼叫的形式為: fgets(字元陣列名,n,檔案指標);其中的n是乙個正整數。表示從檔案中讀出的字串不超過 n
-1個字元。在讀入的最後乙個字元後加上串結束標誌'\0
'。例如:fgets(str,n,fp);的意義是從fp所指的檔案中讀出n
-1個字元送入字元陣列str中。
注意:
a、在讀出n
-1個字元之前,如遇到了換行符或eof,則讀出結束,但遇到空格不結束。
b、fgets函式也有返回值,其返回值是字元陣列的首位址。
int main(void)
fgets(str,12,fp);
printf("%s",str);
fclose(fp);
return 0;
}
2、寫字串函式fputs函式
功能:向指定的檔案寫入乙個字串,其呼叫形式為: fputs(字串,檔案指標) 其中字串可以是字串常量,也可以是字元陣列名或指標 變數,例如:fputs(「abcd「,fp);
int main(void)
printf("input a string:\n");
scanf("%s",st);
fputs(st,fp);
rewind(fp);//把檔案流的指標指向開頭的位置
ch=fgetc(fp);
while(ch!=eof)
fclose(fp);
return 0;
}
下面介紹檔案中的格式化函式fscanf和fprintf
1、fscanf
a、函式原型:
int fscanf(file *fp,char *format,arg_list)
b、功能說明
將fp指定的檔案中的資料按照format指定的格式,輸出到
變數表列(arg_list)中的相應變數。fscanf遇到空格和換行符就結束。表示遇到空格或者換行符,檔案中的相應資料讀取結束。
c、注意
檔案中的資料以逗號隔開,對應的format中的指定格式也以逗號隔開。此時我在vs2010中執行出現錯誤。
d、返回值
成功返回讀入的引數的個數,失敗返回eof(-1)。
void main()
int a;
double b;
char c[15];
fscanf(fp,"%d%lf%s",&a,&b,c);
printf("%d ",a);
printf("%lf ",b);
printf("%s ",c);
}
2、fprintf
a、函式原型:
int fprintf(file *fp,char *format,arg_list)
b、功能說明
將變數表列(arg_list)中的資料,按照format指出的格式,寫入由fp指定的檔案。fprintf()函式與printf()函式的功能相同,只是printf()函式是將資料寫入螢幕檔案(stdout)。
fprintf函式按格式將記憶體中的資料轉換成對應的字元,並以ascⅱ**形式輸出到文字檔案中。
c、引數說明
fp:這是個檔案指標,指出要將資料寫入的檔案。
format:這是個指向字串的字元指標,字串中含有要寫出資料的格式,所以該字串成為格式串。格式串描述的規則與printf()函式中的格式串相同。
arg_list:是要寫入檔案的變數表列,各變數之間用逗號分隔。
d、返回值
輸出的字元數,發生錯誤時返回乙個負值。
void main()
int a = 100;
double b = 6.5;
char c[15] ="tansheng";
fprintf(fp,"%d %lf %s",a,b,c);
}
fprintf格式串中之間有空格或者有逗號,則對應在檔案中也有相應的空格或逗號。
fprintf和fscanf函式對磁碟檔案讀寫,使用方便,但由於在輸入時要將ascii碼轉換為二進位制形式,在輸出時又要將二進位制形式轉換為字元,花費時間比較多。因此,在記憶體與磁碟頻繁交換資料的情況下,最好不用fprinf和fscanf函式,而用fread和fwrite。
Java 中檔案讀取操作
1.建立file f file f new file filename 2.用filereader filereader讀取檔案f中的內容 filereader reader new filereader f 3.建立 char 型別的快取 buf儲存讀取檔案的內容 長度為 f.length cha...
C 資料夾中檔案的讀取
在做影象處理演算法時,我們經常需要讀取資料夾下所有的。每次這樣的操作都要上網查一番,很麻煩。這裡mark一種方便的檔案讀取方法。資料夾下檔案的讀取需要包含標頭檔案io.h。如下 include include ifdef linux include endif ifdef win32 include...
c 讀取資料夾中檔案
直接上 void getfiles string path,vector pic files else while findnext hfile,fileinfo 0 findclose hfile 其中主要用到了 finddata t 結構 struct finddata t 其中unsigned...