FILE 類結構:
struct _iobuf {
char *_ptr; // 檔案輸入的下一個位置
int _cnt; // 目前緩沖區位置
char *_base; // 檔案起始位置
int _flag; // 檔案标志
int _file; // 檔案有效性驗證
int _charbuf; // 目前緩沖區狀況
int _bufsiz; // 緩沖區大小
char *_tmpfname; // 臨時檔案名
};
typedef struct _iobuf FILE;
打開檔案
fopen() 、fopen_s():
// 傳回檔案指針,打開失敗傳回 0。
fopen(
char *filename, // 檔案全路徑
char *mode // 打開方式(r/w/a/r+/w+/a+/t/b) 參考網址:http://c.biancheng.net/view/2054.html
);
// 成功傳回 0,失敗傳回錯誤碼。
fopen_s(
FILE** pFile, // 檔案指針
const char *filename, // 檔案全路徑
const char *mode // 打開方式(同上)
);
讀檔案
fgets():
// 成功傳回緩沖區指針,失敗傳回 NULL。
fgets(
char *str, // 接收檔案内容的緩沖區指針
int n, // 讀取的位元組數
FILE *stream // 檔案對象指針
);
讀取 txt 中所有内容:
// 每行最大長度不得超過 1024 位元組
FILE* f = fopen("Group.txt","r");
char buf[1024];
while(fgets(buf,1024,f)){
cout << buf << endl;
}
讀取 txt 中的某一行:
// 每行最大長度不得超過 1024 位元組
char* readLineChars(FILE* fp,int line){
char buf[1024];
for(int i=0;i<line;i++){
fgets(buf,1024,fp);
// 找到第 i 行
if(i == line-1){
// 去掉換行符
if(buf[strlen(buf)-1] == '\n'){
buf[strlen(buf)-1] = '\0';
}
// 移動檔案指針到檔案頭
fseek(fp,0L,SEEK_SET);
return buf;
}
}
return "error";
}
擷取 txt 行數:
// 每行最大長度不得超過 1024 位元組
int getLineNum(FILE* fp){
int result = 0;
char buf_group[1024];
while(fgets(buf_group,1024,fp)){
result++;
}
// 移動檔案指針到檔案頭
fseek(fp,0L,SEEK_SET);
return result;
}
寫檔案
// 成功傳回非負值,失敗傳回 EOF(-1)
fputs(
const char *str, // 要寫入的字元串
FILE *stream // 指向 FILE 對象的指針
)