目錄
- 一、C語言檔案操作
- 1.打開檔案
- 函式:呼叫 fopen()函式
- 操作:
- 關于檔案路徑
- 關于打開模式
- 2.關閉檔案
- 方式:呼叫 fclose()函式
- 操作:
- 注:
- 3.字符存取
- 方式:呼叫 fgetc() fputc()函式
- 操作:
- 注 :
- 4.字串存取
- 方式:呼叫 fgets() fputs()函式
- 操作:
- 注:
- 5.格式化存取
- 方式:呼叫fscanf() fprintf()函式
- 操作:
- 6. 其他函式
- ①指標重返函式 :rewind()
- ②末尾檢測函式:feof()
- ③隨機存取函式:fseek()
- 解釋:
- 注:
- ④資料塊存取函式 :fread() fwrite()
- 解釋:
- 二.C++檔案操作
- 1. 常用檔案輸入輸出類
- 2.打開檔案
- 方式一:呼叫open()方法
- 方式二: 建構式
- 打開模式
- 打開屬性
- 檢查檔案是否被順利打開 :is_open()
- 3.關閉檔案
- 方式:呼叫close()方法
- 4.檔案的讀寫
- ①文本檔案
- 方式: <<(插入器) >>(析取器)
- ②二進制檔案
- 方式:put() get() read() write()
- 5.其他方法
- ①eof()
- ②seekg() seekp()
- origin的取值
一、C語言檔案操作
1.打開檔案
函式:呼叫 fopen()函式
操作:
FILE *fp;
fp=open("檔案路徑","打開模式");//用檔案指標來接收檔案結構指標地址
關于檔案路徑
c語言中 的 \ 為 轉義字符 若想表達 " \ " 需要用 \\
關于打開模式
1.打開文本檔案
“r” :只讀 前提是檔案存在
“w” : 只寫 如不存在檔案則新建,如存在檔案則洗掉重建
“a” :追加 打開時檔案指標指向末尾(這意味著在末尾添加資料)檔案不存在則打開失敗
“r+” :可讀可寫 前提是檔案存在
“w+” :可讀可寫 新建檔案 填寫資料 之后可讀
“a+” :可讀可寫 打開是檔案指標移動到檔案末尾
2.打開二進制檔案
在文本檔案模式名稱后加 后綴 b 其他同文本檔案的打開模式
2.關閉檔案
方式:呼叫 fclose()函式
操作:
fclose(fp);
注:
fopen() 打開檔案先將檔案復制到緩沖區 當fclose()關閉檔案時 緩沖區資料才會寫入磁盤
在程式結束后會自動關閉檔案 但手動關閉檔案(即用fclose()函式)可以提高系統的執行效率
而且如不關閉,每次讀或寫資料后,檔案指標都會指向下一個待寫或者讀資料位置的指標,
3.字符存取
方式:呼叫 fgetc() fputc()函式
操作:
FILE *fp;
fp=open(".....","r");
char ch;
while (!feof(fp))//feof()判斷是否到達檔案末尾
{
ch =fgetc(fp);//從檔案中逐個讀取字符賦值給ch
}
fclose(fp);
fp=open("......","w");
char str[8]={'a','a','b','b','c','c','d','d','\0'};
int i=0;
while(str[i]!='\0')
{
fputc(str[i],fp);//將字符逐個寫入檔案中
}
fclose(fp);
注 :
在此第一個代碼塊中的feof()函式是判斷指標是否到達檔案末尾 如果到達則回傳true
也可以用ch != EOF來進行替換
fgetc()是從檔案中讀取字符到ch中 而 fputc()是向檔案中寫入字串
fputc()第一個引數為要寫入檔案之中的字符
4.字串存取
方式:呼叫 fgets() fputs()函式
操作:
在此我們不做詳細演示
fgets(str,n,fp);//str為字符陣列用來存放在檔案中讀取的字符 n表示每次讀取n個字符 fp即為檔案指標
fputs(str,fp);//第一個引數可以為要寫入的字串、字符陣列名、字符型指標或字串常量
注:
同字符存取函式 fgets()是將檔案中的字串讀取到程式當中來
而fputs()函式把程式中定義的字串寫到檔案中去
5.格式化存取
方式:呼叫fscanf() fprintf()函式
操作:
int rollnumber;
char name[20];
int score;
FILE *fp=fopen("......","r");
while(!feof(fp))
{
fscanf(fp,"%d%s%d",&rollnumber,name,&score);//將檔案中資料 按此種輸入方式格式化 并賦值給這三個變數
}
fclose(fp);
int rollnumber="123456789"
char name[20]="Jack";
int score=99;
fp=fopen("......","a");
fprintf(fp,"%d%s%d",rollnumber,name,score);//將資料輸出到檔案中
6. 其他函式
①指標重返函式 :rewind()
rewind(fp);//將fp重新指向檔案開頭
②末尾檢測函式:feof()
feof(fp);//檢測指標是否到了檔案末尾 如到檔案末尾則回傳true
③隨機存取函式:fseek()
FILE *fp=fopen("......","r");
fseek(fp,5,1);
while(!feof(fp))
{
.......
}
fclose(fp);
解釋:
fseek(fp,offset,start);
fp為檔案指標 offset 為對于起始點的偏移量
start 為起始點 共有三種狀態 0 表示檔案開始 1 表示當前位置 2 表示檔案末尾
注:
fseek一般用于二進制檔案 因為文本檔案要發生字符轉換,計算位置時往往會發生混亂
④資料塊存取函式 :fread() fwrite()
fp=fopen("......","rb+");
char str[50];
fread(str,sizeof(char),25,fp);
.......
fclose(fp);
fp=fopen("......","wb+");
char str[50]="abcdefg";
fwrite(str,sizeof(char),7,fp);
........
fclose(fp);
解釋:
fread(buffer, size, count, fp);
fwrite(buffer, size, count, fp);
如果是fread中的buffer 則為資料的存放地址 若為 fwrite中的buffer則為所要輸出的資料的地址
size:表示每個資料的大小
count:表示有多少個資料
fp:即為檔案指標
二.C++檔案操作
與C語言不同,C++是通過實體化類物件與檔案產生聯系,進而對檔案進行操作
1. 常用檔案輸入輸出類
ifstream 可讀的檔案類
ofstream 可寫的檔案類
fstream 可讀可寫的檔案類
2.打開檔案
方式一:呼叫open()方法
ofstream file;
file.open("......",ios::out|ios::app|ios::binary,0);
方式二: 建構式
ofstream file(".......",ios::out||ios::app||ios::binary);
打開模式
open() 第二個引數為檔案的打開模式
ios::in 以讀的形式打開檔案,為ifstream/fstream open()函式的默認引數
ios::out 以寫的形式打開檔案,為ofstream/fstream open()函式的默認引數
ios::ate 打開的初始位置為檔案末尾
ios::trunc 如果檔案存在則刪了重建 , 為ofstream open()函式的默認引數
ios::binary 打開二進制檔案
打開屬性
open() 第三個引數為所打開檔案的屬性
0 :普通檔案
1:只讀檔案
2:隱含檔案
4:系統檔案
檢查檔案是否被順利打開 :is_open()
ofstream file("......");
flie.is_open();//該函式回傳為一個bool值
3.關閉檔案
方式:呼叫close()方法
ifstream file;
file.open(".......",ios::in);
.......
file.close();
4.檔案的讀寫
①文本檔案
方式: <<(插入器) >>(析取器)
向檔案中寫入
ofstream file("......");
file<<"hello world";
file.close();
從檔案中輸入
ifstream file(".......");
string str;
file>>str;
file.close();
②二進制檔案
方式:put() get() read() write()
向檔案中寫入
ofstream file("......",ios::out||ios::app||ios::binary);
file.put('字符');//向檔案中寫入一個字符
..........
從檔案中讀取字符
ifstream file("......",ios::binary||ios::in);
char ch;
string str;
file.get(ch);//從檔案中讀取一個檔案并賦值給ch;
file.get(str,128,'\0');//從檔案中讀取128個字符并賦值給字串str 遇到'\0'終止
..........
輸出資料塊
char *str="hello world";
ofstream file("......");
file.write(str,256);//從str中讀取256個字符寫到檔案中
.........
輸入資料塊
char *str;
ifstream file(".......");
file.read(str,256);//從檔案中讀取256個字符到str中
5.其他方法
已定義file
fstream file("........");
①eof()
flie.eof()//到達檔案末尾回傳非0
②seekg() seekp()
file.seekg(offset,origin);//設定讀(指標)位置 offset為從初始位置向后的偏移距離 orgin為初始位置
file.seekp(offset,origin);//設定寫(指標)位置,其余同上
origin的取值
ios::beg :檔案開頭
ios::cur :檔案當前位置
ios::end :檔案結尾
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/279293.html
標籤:其他
