1 文件打开
EG:
#include<stdio.h>
int main()
{
//文件的打开
//FILE 是一种文件类型,下面的fp是一个文件指针
//fopen("参数一","参数二")
//参数一:文件名,可以包含路径你,如果没有路径则默认从当前可执行文件查找该文件
//参数二:打开文件的方式
//如果打开文件失败则返回NULL,成功则返回文件指针
FILE *fp = fopen("test.txt", "w");
//如果流成功关闭,fclose 返回 0,否则返回EOF(EOF是系统的一个宏,值位-1,全称为 End of File)。
//打开文件必须关闭:
//1.防止内存泄漏
//2.刷新缓冲区,防止写入的数据在缓冲区保存,没有写入文件
if (fclose(fp) && fp!= NULL)
{
perror("close file error!");
}
return 0;
}
2 fgets与fputs
2.1 fputs函数
EG:
#include<stdio.h>
#include<string.h>
int main()
{
FILE *fp = fopen("test.txt", "w");
if (fp != NULL)
{
char s[] = "China";
int len = strlen(s);
for (int i = 0; i < len; i++)
{
//fputc(字符,文件指针); 1.写入成功,则返回写入字符的ASCII码 2.如果写入失败则返回EOF
if (fputc(s[i], fp) == EOF)
{
perror("write file error!");
break;
}
}
}
if (fclose(fp) && fp!= NULL)
{
perror("close file error!");
}
return 0;
}
2.2 fgetc函数
EG:
#include<stdio.h>
#include<string.h>
int main()
{
FILE *fp = fopen("test.txt", "r");
if (fp != NULL)
{
//char ch = fgetc(fp) 1.数据读出成功则返回改读出字符 2.如果数据读出失败或则读到文件末尾则返回EOF
char ch = fgetc(fp);
//feof(fp) 判断文件是否督导末尾 1.如果读到末尾则返回1,否则返回0 2.为什么不用EOF这个宏来判断文件是否读到末尾,因为二进制读出文件时有可能其文件内容为-1,但此时不代表读到文件末尾
while (!feof(fp))
{
printf("%c", ch);
ch = fgetc(fp);
}
}
if (fclose(fp) && fp!= NULL)
{
perror("close file error!");
}
return 0;
}
2.3 关于文件操作的其它函数
3 实战代码操练
EG:
#include<stdio.h>
#include<string.h>
int main()
{
FILE *fp = fopen("test.txt", "r");
if (fp != NULL)
{
char LineBuffer[1024];
while (!feof(fp))
{
LineBuffer[0] = 0;
//读取一行遇到换行符结束
if (fgets(LineBuffer, sizeof(LineBuffer) - 1, fp) == NULL)
continue;
if (LineBuffer[0] == 0)
continue;
Rstring:
if (strlen(LineBuffer) >= 0) //读取的不是空
{
if (LineBuffer[strlen(LineBuffer) - 1] == 10 || LineBuffer[strlen(LineBuffer) - 1] == 10)
{
LineBuffer[strlen(LineBuffer) - 1] = 0; //将末尾读取的换行或者回车拿掉
goto Rstring;
}
}
if (strlen(LineBuffer) <= 0)
continue;
printf("%s\n", LineBuffer);
}
}
if (fclose(fp) && fp!= NULL)
{
perror("close file error!");
}
return 0;
}
4 将C语言类型数据写入文件再读出
EG:
#include<stdio.h>
int main()
{
double a[2] = { 3,5 }; //将此数据写入文件
double a1[2]; //将写入的文件读出
//不一定必须是double,结构体也可以
//打开一个文件,将a数组写入文件
FILE *fp = fopen("test.bin", "wb");
if (fp != NULL)
{
int result = fwrite(a, sizeof(double), 2, fp); //写入
fclose(fp);
}
fp = fopen("test.bin", "rb");
if (fp != NULL)
{
int result = fread(a1, sizeof(a1), 2, fp); //读出
fclose(fp);
}
return 0;
}