1.EOF
代表-1,在文本中會被解析為減號和1兩個字符,或更精確地說成C標准函數庫中表示文件結束符(end of file)。在這種以EOF作為文件結束標志的文件,必須是文本文件。在文本文件中,數據都是以字符的ASCII代碼值的形式存放。我們知道,ASCII代碼值的范圍是0~127,不可能出現-1,因此可以用EOF作為文件結束標志。
2.函數feof
函數原型: int feof(FILE *fp)
功能:判斷文件是否結束
返回值:文件結束,返回真(非0),文件未結束,返回0
3.實例
- 非密碼加密 txt
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> void jia(char *path,char *newpath) { FILE *pfr = fopen(path, "r"); FILE *pfw = fopen(newpath, "w"); char ch = 0; while (ch != EOF) //EOF 文件結束 { ch = fgetc(pfr);//讀取,EOF if (ch != EOF) { ch += 1; fputc(ch, pfw); } } fclose(pfr); fclose(pfw); }
void jie(char *path, char* newpath) { FILE *pfr = fopen(path, "r"); FILE *pfw = fopen(newpath, "w"); char ch = 0; while (ch != EOF) //EOF 文件結束 { ch = fgetc(pfr);//讀取,EOF if (ch != EOF) { ch -= 1; fputc(ch, pfw); } } fclose(pfr); fclose(pfw); } void main() { char *path = "C:\\Users\\sjx\\Desktop\\test\\Q.txt"; char *pathjia = "C:\\Users\\sjx\\Desktop\\test\\Qjia.txt"; char *pathjie = "C:\\Users\\sjx\\Desktop\\test\\Qjie.txt"; jia(path, pathjia); jie(pathjia, pathjie);//路徑 system("pause"); } system("pause"); }
- 根據密碼加密 (二進制文件加密解密)
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> char *path = "C:\\Users\\sjx\\Desktop\\test\\Q.exe"; char *pathjia = "C:\\Users\\sjx\\Desktop\\test\\Qjia.exe"; char *pathjie = "C:\\Users\\sjx\\Desktop\\test\\Qjie.exe"; void run(char *path, char *newpath) { FILE *pfr = fopen(path, "rb"); FILE *pfw = fopen(newpath, "wb"); if (pfr==NULL || pfw ==NULL) { return; } else { char ch; while (!feof(pfr)) { char ch = fgetc(pfr); char newch = ch ^ 3; fputc(newch, pfw); } fclose(pfr); fclose(pfw); } } void main() { run(path, pathjia); run(pathjia, pathjie); /*printf("%d", getfilesizeseek(path));*/ system("pause"); }
3.獲取二進制文件的大小
- 函數fseek,用以控制、調整文件指針的值,從而改變下一次讀寫操作的位置
- 函數原型:int fseek(FILE * fp, long offset, int startPos);
- fp是文件指針,startPos是起始點,offset是目標位置相對起始點的偏移量,正數表示正向偏移(向右),負數表示負向(向左)偏移,如果函數操作執行成功,文件位置指針將被設定為“起始點+offset”,起始點並不是任意設定的,C語言給出了3中起始點方式,如所示:


#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> char *path = "C:\\Users\\sjx\\Desktop\\test\\Q.exe"; char *pathjia = "C:\\Users\\sjx\\Desktop\\test\\Qjia.exe"; char *pathjie = "C:\\Users\\sjx\\Desktop\\test\\Qjie.exe"; int getfilesize(char *path) { int i = -1; FILE *pfr = fopen(path, "rb"); if (pfr == NULL ) { return -1; } else { while (!feof(pfr)) { char ch=fgetc(pfr); i++;//讀取一個字符,前進一次 } fclose(pfr); return i; } } int getfilesizeseek(char *path) { FILE *pfr = fopen(path, "rb"); if (pfr == NULL) { return -1; } else { fseek(pfr, 0, SEEK_END);//文件指針移動末尾 int length = ftell(pfr);//得到文件位置指針當前位置相對於文件首的偏移字節數 fclose(pfr); return length; } } int main() { run(path, pathjia); run(pathjia, pathjie); /*printf("%d", getfilesizeseek(path));*/ system("pause"); }
