fgetc
一个一个的读:
1. #include <stdio.h> 2. #include <string.h> 3. #include <errno.h> 4. 5. int main() 6. { 7. FILE* pf = fopen("date.txt", "r"); 8. if (pf == NULL) 9. { 10. printf("%s\n", strerror(errno)); 11. } 12. 13. //读文件(一个一个的) 14. int ch = 0;//fgetc返回的是ASCII码值,用char也可以,但是,当文件结束的时候,返回的是EOF(-1),所以用int 15. while ((ch = fgetc(pf)) != EOF) 16. { 17. printf("%c ", ch); 18. }// 在这里,pf会自动向后移一位 19. fclose(pf); 20. pf = NULL; 21. return 0; 22. }
fputs
一行一行的写:
1. #include <stdio.h> 2. #include <string.h> 3. #include <errno.h> 4. 5. int main() 6. { 7. FILE* pf = fopen("date.txt", "w"); 8. if (pf == NULL) 9. { 10. printf("%s\n", strerror(errno)); 11. } 12. //一行一行的写 13. fputs("nihao\n", pf); 14. fputs("youyoumen\n", pf);//自己加换行符号,再加上,文本输出函数 15. fclose(pf); 16. pf = NULL; 17. return 0; 18. }
fgets
读一行:
1. #include <stdio.h> 2. #include <string.h> 3. #include <errno.h> 4. 5. int main() 6. { 7. FILE* pf = fopen("date.txt", "r"); 8. if (pf == NULL) 9. { 10. printf("%s\n", strerror(errno)); 11. } 12. //一行一行的读 13. char buf[1000] = { 0 }; 14. fgets(buf, 1000, pf);//读1000-1个,仅仅显示一行。如果这一行的字符不止999个,最次用fgets,就会接着获取后面的内容;返回空指针的时候,文件结束 15. printf("%s", buf); 16. fclose(pf); 17. pf = NULL; 18. return 0; 19. }
实现一个代码,将date.txt拷贝一份生成date2.txt
1. #include <stdio.h> 2. #include <string.h> 3. #include <errno.h> 4. 5. int main() 6. { 7. //打开 8. FILE* pr = fopen("date.txt", "r"); 9. if (pr == NULL) 10. { 11. printf("open for reading:%s\n", strerror(errno)); 12. return 0; 13. } 14. FILE* pw = fopen("date2.txt", "w"); 15. if (pw == NULL) 16. { 17. printf("open for writting:%s\n", strerror(errno)); 18. fclose(pr); 19. pr = NULL; 20. return 0; 21. } 22. //拷贝文件 23. //读一个拷贝一个 24. int ch = 0; 25. while ((ch = fgetc(pr)) != EOF) 26. { 27. fputc(ch, pw); 28. } 29. 30. 31. 32. 33. //关闭 34. fclose(pw); 35. pw = NULL; 36. fclose(pr); 37. pr = NULL; 38. return 0; 39. }
fprintf
(格式化输出函数)写格式化的数据:写数据到文件里
1. #include <stdio.h> 2. #include <string.h> 3. #include <errno.h> 4. 5. struct Stu 6. { 7. char name[20]; 8. int age; 9. double d; 10. }; 11. 12. int main() 13. { 14. struct Stu s = { "张三", 20, 95.5 }; 15. FILE* pf = fopen("date.txt", "w"); 16. if (pf == NULL) 17. { 18. printf("%s\n", strerror(errno)); 19. return 0; 20. } 21. //写数据 22. fprintf(pf, "%s %d %lf", s.name, s.age, s.d); 23. fprintf(stdout, "%s %d %lf", s.name, s.age, s.d); 24. printf("%s %d %lf", s.name, s.age, s.d); 25. 26. //关闭 27. fclose(pf); 28. pf = NULL; 29. return 0; 30. }
fscanf
(格式化输入函数)从文件里读数据
1. #include <stdio.h> 2. #include <string.h> 3. #include <errno.h> 4. 5. struct Stu 6. { 7. char name[20]; 8. int age; 9. double d; 10. }; 11. 12. int main() 13. { 14. struct Stu s = { 0 }; 15. FILE* pf = fopen("date.txt", "r"); 16. if (pf == NULL) 17. { 18. printf("%s\n", strerror(errno)); 19. return 0; 20. } 21. //读数据 22. fscanf(pf, "%s %d %lf", s.name, &(s.age), &(s.d)); 23. printf("%s %d %lf", s.name, s.age, s.d); 24. 25. //关闭 26. fclose(pf); 27. pf = NULL; 28. return 0; 29. }
fwrite
1. #include <stdio.h> 2. #include <string.h> 3. #include <errno.h> 4. 5. struct Stu 6. { 7. char name[20]; 8. int age; 9. double d; 10. }; 11. 12. int main() 13. { 14. struct Stu s[2] = { {"张三", 20, 95.5},{"李四", 19, 95 } }; 15. FILE* pf = fopen("date.txt", "wb"); 16. if (pf == NULL) 17. { 18. printf("%s\n", strerror(errno)); 19. return 0; 20. } 21. //按照二进制的方式写文件,放进二进制信息 22. fwrite(s, sizeof(struct Stu), 2, pf);// 23. 24. //关闭 25. fclose(pf); 26. pf = NULL; 27. return 0; 28. }
fread
1. #include <stdio.h> 2. #include <string.h> 3. #include <errno.h> 4. 5. struct Stu 6. { 7. char name[20]; 8. int age; 9. double d; 10. }; 11. 12. int main() 13. { 14. struct Stu s[2] = { 0 }; 15. FILE* pf = fopen("date.txt", "rb"); 16. if (pf == NULL) 17. { 18. printf("%s\n", strerror(errno)); 19. return 0; 20. } 21. //按照二进制的方式读文件 22. fread(s, sizeof(struct Stu), 2, pf);// 23. 24. 25. printf("%s %d %lf", s[0].name, s[0].age, s[0].d); 26. printf("%s %d %lf", s[1].name, s[1].age, s[1].d); 27. 28. //关闭 29. fclose(pf); 30. pf = NULL; 31. return 0; 32. }
知识点:fread的返回值是读取文件内容的块数目,不是文件总大小