C對檔案的一些操作(孫鑫vc 的閱讀筆記)

2021-08-01 16:18:27 字數 2880 閱讀 1079

開啟檔案

file fopen(const char *filename,const char *mode);

@filename 要開啟的檔案

@mode 開啟的模式

開啟的模式有如下:

"r" = "rt"

開啟乙個文字檔案,檔案必須存在,只允許讀

"r+" = "rt+"

開啟乙個文字檔案,檔案必須存在,允許讀寫

"rb"

開啟乙個二進位制檔案,檔案必須存在,只允許讀

「rb+」

開啟乙個二進位制檔案,檔案必須存在,允許讀寫

"w" = 「wt」

新建乙個文字檔案,已存在的檔案將被刪除,只允許寫

"w+" = "wt+"

新建乙個文字檔案,已存在的檔案將被刪除,允許讀寫

「wb」

新建乙個二進位制檔案,已存在的檔案將被刪除,只允許寫

「wb+」

新建乙個二進位制檔案,已存在的檔案將被刪除,允許讀寫

"a" = "at"

開啟或新建乙個文字檔案,只允許在檔案末尾追寫

"a+" = "at+"

開啟或新建乙個文字檔案,可以讀,但只允許在檔案末尾追寫

「ab」

開啟或新建乙個二進位制檔案,只允許在檔案末尾追寫

「ab+」

開啟或新建乙個二進位制檔案,可以讀,但只允許在檔案末尾追寫

例:file *fp = fopen("file.txt", "w");//新建開啟乙個文字檔案file.text,已存在的檔案將被刪除,只允許寫

二進位制檔案跟文字檔案的區別

檔案只是計算機記憶體中以二進位制表示的資料在外部儲存介質上的另外一種方式。對於文字檔案來說,它只是一種特殊形式的檔案,它存放的每乙個位元組都可以轉換為乙個可讀的字元而已。

我們執行以下**

c++中預設的寫入跟讀取都是用文字的方式,以上是採用文字的形式寫入,那麼它在記憶體中儲存的值為

a的ascii碼為61,b為62,10為0a,那麼我們寫入3個位元組,為什麼位址上會有4個位元組呢?

文字的方式是無論是數字還是字元都是先轉換成ascii碼然後在儲存在記憶體當中,其次當遇到ascii碼的oa(對應的是換行符)時,會產生od oa連續的(回車--換行),所以我們寫入3個位元組,記憶體當中有4位元組。但是值得注意的是,當我們讀取的時候,od-oa也會轉換成換行1個字元,雖然記憶體為4個位元組,但是我們讀取的仍然是3個位元組。

當我們需要在文字方式中寫入數字時,需要先把數字轉換成其相對應的ascii碼,如:

此時讀出來的才是我們想看到的數字98341.

二進位制文字是讀取不到字元的,他會把所有記憶體讀取出來都是數字,寫入什麼讀出來的就是什麼。

當我們用文字/二進位制方式寫入時,採用二進位制/文字方式讀取,都會產生亂碼。所以我們需要用什麼方式寫,就用什麼方式讀。

寫入資料

size_t fwrite(const char *buffer,size_t size,size_t count,file* stream);

@buffer 寫入資料的位址

@size 寫入資料中每個字元的大小(以位元組為單位,1表示1個位元組),如寫入「123」表示『1』,『2』,『3』各自的大小1

@count 寫入資料的總大小,如「123」,的總大小3.

@stream fopen的例項fp;

c語言對檔案的操作使用了緩衝檔案系統。系統自動為正在使用的檔案開闢一塊緩衝區域,我們從記憶體向磁碟寫入需先寫入到緩衝區之後。當fopen時,我們向緩衝區寫入資料,當緩衝區內資料滿了的時候它才會把資料寫入到磁碟檔案中,否則我們需要關閉(直接叉叉程式或者呼叫fclose)file程式,否則即使程式執行完畢也不會把緩衝區資料寫入到磁碟檔案中。

當我們需要頻繁的寫入資料時,我們並不可能一直fopen,fclose。所以我們可以呼叫fflush執行。

當我們對檔案進行操作的時候,系統都會存在乙個檔案指標,根據我們的操作來產生偏移。

int fseek(file* stream,long offset, in origin);

@stream fopen的例項fp;

@offset 偏移量

@origin 起始位置

/*origin*/

seek_cur  檔案指標當前位置

seek_end  檔案指標結尾處

seek_set  檔案指標開始處

例:fseek(fp,1,seek_set);//檔案開始位置偏移1

檔案資料讀取

size_t fread(void *buffer,size_t size,size_t count,file* stream);

@buffer 讀取資料後存放的位址

@size 寫入資料中每個字元的大小(以位元組為單位,1表示1個位元組),如寫入「123」表示『1』,『2』,『3』各自的大小1

@count 寫入資料的總大小,如「123」,的總大小3.

@stream fopen的例項fp;

char ch[100];

例:fread(ch,1,100,fp);//讀取fp檔案中100個位元組到ch中

注意:

當count的大小有100,而實際讀取資料的大小不到100時,其他部分許多資料為隨機的,是不可讀資料,結果則亂碼。

如當size_t fread(ch,1,100,fp);//假設fp中的資料為123

則輸出為:

123*&……*&%*……&%&……%&……**&……*&……*&

會出現的現象如上,123後面會出現亂碼。

解決方法:

1.寫入資料「123」時改為「123\0」.

2.呼叫memset(ch,0,100).//在123後面的資料為空

c 中對檔案的一些操作

include include include using namespace std int main if outfile int a,b int i 0,j 0 int data 6 2 while myfile.eof myfile.close for int k 0 k outfile c...

PHP對檔案的一些操作

alter table guitarwars drop column score 從資料庫中刪除乙個列 add columu新增乙個新列 change column修改一列 modify columu 修改乙個資料表中某一列的資料型別或位置。files 是內建的php超級全域性變數,通過它將一些有用...

對檔案的一些操作2

對檔案的一些操作2 author administrator date 2019 10 29 f open tx1 r encoding utf8 1 按照字元列印 print f.read 5 print f.read 5 print 有個自動換行 一剪梅 紅藕香殘 2 一行一行列印 print ...