有了php源碼怎么做網(wǎng)站公司網(wǎng)絡(luò)推廣排名定制
? ? ? ? ? ? ? ? ? ? ? ?你好!感謝支持孔乙己的新作,本文就文件操作與大家分享我的思路。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?希望能大佬們多多糾正及支持 !!!
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 個(gè)人主頁:愛摸魚的孔乙己-CSDN博客??
目錄
?1.什么是文件
?1.1.程序設(shè)計(jì)文件
1.1.1.程序文件
1.1.2.數(shù)據(jù)文件?
1.2.二進(jìn)制文件與文本文件?
2.文件的打開及關(guān)閉
?2.1.流和標(biāo)準(zhǔn)流
2.1.1.流(stream)
2.1.2.標(biāo)準(zhǔn)流
2.2.文件指針????????????????????????????????????????????????????????????????????????????????????????
2.3.文件的打開及關(guān)閉?
2.4.文件的順序讀寫
3.文件操作讀寫深入解析
3.1.fseek
3.2.ftell
3.3.rewind?
3.4.feof?
?
?1.什么是文件
Leading ~~ 我們可以把文件看做一種用于存儲(chǔ)信息的數(shù)據(jù)集合,可以是電子形式或紙質(zhì)形式。在計(jì)算機(jī)中,文件通常由操作系統(tǒng)管理,保存用戶的數(shù)據(jù)信息,文件可以包含文本、圖像、音頻、視頻等各種數(shù)據(jù)。因此,我們有必要對(duì)文件進(jìn)行各種處理,常見的文件操作包括創(chuàng)建、打開、讀取、寫入、關(guān)閉和刪除等。
?1.1.程序設(shè)計(jì)文件
從文件功能的角度來分類,我們一般所涉及的有兩種文件,一種是程序文件,另一種是數(shù)據(jù)文件。當(dāng)然,程序文件一般指的是計(jì)算機(jī)可執(zhí)行代碼的文件,這些代碼通過編譯或解釋生成,并且程序文件通常用于執(zhí)行特定的任務(wù)或功能。
1.1.1.程序文件
- 執(zhí)行性:程序文件可以被操作系統(tǒng)直接執(zhí)行,在運(yùn)行時(shí)會(huì)將代碼加載在內(nèi)存中。
- 格式 :常見的程序文件格式包括可執(zhí)行文件(如.exe 、.app等)和腳本文件(如.py 、.js、.sh等)。
- 內(nèi)容?:程序文件的內(nèi)容包含了指令和邏輯,用于控制計(jì)算機(jī)的行為。
- 開發(fā)工具?:程序文件通常是由編程語言的編譯器或解釋器實(shí)現(xiàn)的。
1.1.2.數(shù)據(jù)文件?
- 不可執(zhí)行性:數(shù)據(jù)文件本身不可以直接執(zhí)行。
- 格式多樣性:數(shù)據(jù)文件可以是文本文件(如 .txt、.csv)、二進(jìn)制文件(如 .bin、.dat)、數(shù)據(jù)庫文件(如 .db、.sqlite)等。
- 內(nèi)容:數(shù)據(jù)文件的內(nèi)容通常包括文本、數(shù)字、圖像、音頻、視頻等多種類型的信息。
- 結(jié)構(gòu)化和非結(jié)構(gòu)化:數(shù)據(jù)文件可以是結(jié)構(gòu)化的(如數(shù)據(jù)庫)或非結(jié)構(gòu)化的(如普通文本文件)。
? ? ? ?程序文件主要用于開發(fā)和應(yīng)用程序、工具和系統(tǒng)軟件、或用于控制硬件設(shè)備和進(jìn)行系統(tǒng)管理以及自動(dòng)化任務(wù)和處理數(shù)據(jù);數(shù)據(jù)文件主要用于存儲(chǔ)用戶信息、設(shè)置、文檔和媒體文件、或用于應(yīng)用程序的數(shù)據(jù)輸入及輸出,乃至進(jìn)行數(shù)據(jù)分析、報(bào)表生成和數(shù)據(jù)遷移。?
1.2.二進(jìn)制文件與文本文件?
????????數(shù)據(jù)在內(nèi)存中以二進(jìn)制的形式存儲(chǔ),不加轉(zhuǎn)換的輸出到外存的文件中,就是二進(jìn)制文件,如果外存上以ASCII碼的形式存儲(chǔ),則需要在存儲(chǔ)前轉(zhuǎn)換,以ASCII字符的形式存儲(chǔ)的文件就是文本文件。字符一律以ASCII形式存儲(chǔ),數(shù)值型數(shù)據(jù)可以用ASCII形式存儲(chǔ),或使用二進(jìn)制形式存儲(chǔ)。
2.文件的打開及關(guān)閉
?2.1.流和標(biāo)準(zhǔn)流
2.1.1.流(stream)
????????流是一種數(shù)據(jù)傳輸?shù)囊环N抽象,通常用于處理數(shù)據(jù)的輸入和輸出。流可以看作是數(shù)據(jù)的序列,可以是字節(jié)流(binary stream)或字符流(character stream)。根據(jù)數(shù)據(jù)的方向,流可以分為兩種類型,一種是輸入流:用于從外部源(如文件、網(wǎng)絡(luò)、用戶輸入等)讀取數(shù)據(jù);另一種是輸出流:用于將數(shù)據(jù)攜入外部目標(biāo)(如顯示器、文件、網(wǎng)絡(luò)連接等)。
流的主要特點(diǎn)包括:
- 順序訪問:數(shù)據(jù)以順序的方式被讀取或?qū)懭搿?/li>
- 可打開和關(guān)閉:流在使用前需要被打開,使用后需要關(guān)閉,以釋放資源。
- 緩沖:許多實(shí)現(xiàn)使用緩沖技術(shù)來提高性能,允許數(shù)據(jù)的塊讀取和寫入。?
2.1.2.標(biāo)準(zhǔn)流
????????標(biāo)準(zhǔn)流是操作系統(tǒng)層面定義的一種特殊流,通常是用于數(shù)據(jù)輸和輸出的通道。程序運(yùn)行時(shí),操作系統(tǒng)會(huì)提供以下三個(gè)流:
stdin(標(biāo)準(zhǔn)輸?流) | 在?多數(shù)的環(huán)境中從鍵盤輸?,scanf函數(shù)就是從標(biāo)準(zhǔn)輸?流中讀取數(shù)據(jù)。 |
stdout(?標(biāo)準(zhǔn)輸出流) | ?多數(shù)的環(huán)境中輸出?顯?器界?,printf函數(shù)就是將信息輸出到標(biāo)準(zhǔn)輸出中。 |
stderr(標(biāo)準(zhǔn)錯(cuò)誤流) | ?多數(shù)環(huán)境中輸出到顯?器界?。???????????????????????????????????????????????????????? |
2.2.文件指針????????????????????????????????????????????????????????????????????????????????????????
????????以上stdin、stdouot、stderr三個(gè)流的類型是FILE*,通常稱為文件指針,?在C語言中,我們就是通過FILE*的文件指針進(jìn)而維護(hù)流的各項(xiàng)操作。
????????每個(gè)文件在內(nèi)存中開辟一個(gè)對(duì)應(yīng)的文件信息區(qū),用于存放文件的名字、文件狀態(tài)及文件當(dāng)前所在的位置。這些信息是保存在一個(gè)結(jié)構(gòu)體變量中的,且該結(jié)構(gòu)體類型命名為FILE。然后,我們定義一個(gè)指向FILE類型的指針變量ptr,指向某個(gè)文件的文件信息區(qū)(結(jié)構(gòu)體變量),通過文件指針變量就能夠間接查找與之關(guān)聯(lián)的文件。????????
2.3.文件的打開及關(guān)閉?
????????當(dāng)我們編寫程序時(shí),在打開文件的同時(shí),都會(huì)返回一個(gè)的FILE*的指針變量指向該文件,從而建立指針與文件的關(guān)系。并且,ANSIC規(guī)定使用fopen函數(shù)作為打開文件,fclose作為關(guān)閉文件。
//打開?件
FILE * fopen ( const char * filename, const char * mode );
//關(guān)閉?件
int fclose ( FILE * stream );
????????其中,mode是文件的打開模式。其中“r“與”w”分別為輸入與輸出數(shù)據(jù),而“a”是向文本文件尾添加數(shù)據(jù),當(dāng)然,諸如“rb“和”wb“,其作用的便是二進(jìn)制文件,等等。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ????????
2.4.文件的順序讀寫
?fread與fwrite比較適用于文件輸入輸出流,其余可以適用于所有輸入流。? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
3.文件操作讀寫深入解析
3.1.fseek
????????fseek是C語言是一個(gè)標(biāo)準(zhǔn)庫函數(shù),用于在文件中進(jìn)行隨機(jī)訪問,并且可以將文件指針定位至特定位置,以便進(jìn)行讀寫操作。
//fseek
//根據(jù)?件指針的位置和偏移量來定位?件指針(?件內(nèi)容的光標(biāo))。
1 int fseek ( FILE * stream, long int offset, int origin );
stream: 指向要操作的文件的指針,通常是通過 fopen 打開的文件。
offset: 偏移量,表示相對(duì)于 whence 的字節(jié)數(shù)。
origin: 確定偏移的起始位置,可以是以下常量之一:
SEEK_SET: 文件開頭。
SEEK_CUR: 當(dāng)前文件指針的位置。
SEEK_END: 文件的末尾。/* fseek example */
#include <stdio.h>int main ()
{FILE * pFile;pFile = fopen ( "example.txt" , "wb" );fputs ( "This is an apple." , pFile );fseek ( pFile , 9 , SEEK_SET );fputs ( " sam" , pFile );fclose ( pFile );return 0;
}
?????????在使用fseek之前,確保文件已成功打開;如果目標(biāo)位置超出了文件的實(shí)際大小,fseek可能會(huì)導(dǎo)致未定義的行為;在進(jìn)行寫入操作之前,確保文件模式允許寫入(例如,使用”r+“或”w+“模式)。
3.2.ftell
????????ftell是C語言中的一個(gè)·標(biāo)準(zhǔn)庫函數(shù),用于獲取當(dāng)前文件在文件中的位置,并且它返回的是當(dāng)前指針相對(duì)于文件開頭的字節(jié)偏移量。
返回?件指針相對(duì)于起始位置的偏移量
1 long int ftell ( FILE * stream );/* ftell example : getting size of a file */#include <stdio.h>
int main ()
{FILE * pFile;long size;pFile = fopen ("myfile.txt","rb");if (pFile==NULL) perror ("Error opening file");else{fseek (pFile, 0, SEEK_END); // non-portablesize=ftell (pFile);fclose (pFile);printf ("Size of myfile.txt: %ld bytes.\n",size);}return 0;
}
????????成功時(shí)返回當(dāng)前文件指針的偏移量(類型為?long
),在一些特定情況下,如果文件被錯(cuò)誤地打開,或者文件指針經(jīng)過某些非法操作,ftell
?可能返回?-1
。
3.3.rewind?
?????????rewind是C語言中的一個(gè)標(biāo)準(zhǔn)庫函數(shù),用于將文件指針重置為文件的開頭,使用起來非常簡(jiǎn)單且直觀,通常用于將文件指針返回到起始位置,以便重新開始讀取或?qū)懭胛募?nèi)容。
讓?件指針的位置回到?件的起始1 void rewind ( FILE * stream );/* rewind example */
#include <stdio.h>
int main ()
{int n;FILE * pFile;char buffer [27];pFile = fopen ("myfile.txt","w+");for ( n='A' ; n<='Z' ; n++)fputc ( n, pFile);rewind (pFile);fread (buffer,1,26,pFile);fclose (pFile);buffer[26]='\0';printf(buffer);return 0;
}
? ?rewind
?是一個(gè)簡(jiǎn)單且有效的方法來返回文件指針至開頭。調(diào)用?rewind
?也會(huì)清除與文件流關(guān)聯(lián)的錯(cuò)誤指示符,因此如果之前的讀寫操作發(fā)生了錯(cuò)誤,錯(cuò)誤狀態(tài)會(huì)被重置。在使用?rewind
?前,確保文件已成功打開,否則將導(dǎo)致未定義行為。
3.4.feof?
