Maine

纵有疾风起,人生不言弃

10. C语言基础-文件

  1. 打开关闭:
// 打开成功返回地址,失败返回空
// w 文件存在清空打开,不存在新建
// r 不存在打开失败 
// w+ 读写
// a 追加,存在则追加(光标放到文件末尾),不存在新建
FILE *fp = fopen("demo.txt", "w");
if (NULL == fp)
{
    printf("%s\n", "打开失败");
    perror("fopen");
    return -1;
}else {
    printf("%s\n", "打开成功");
}

fclose(fp); // 关闭文件,刷新缓冲区
fp = NULL;
  1. 写文件 — fputc()
// 打开成功返回地址,失败返回空
// w 文件存在清空打开,不存在新建
// r 不存在打开失败 
// w+ 读写
// a 追加,存在则追加(光标放到文件末尾),不存在新建
FILE *fp = fopen("demo.txt", "w");
if (NULL == fp)
{
    printf("%s\n", "打开失败");
    perror("fopen");
    return -1;
}else {
    printf("%s\n", "打开成功");
}

// 挨个字符写入
for (int i = 0; i < 26; ++i)
{
    fputc('a'+i, fp);
}


fclose(fp); // 关闭文件,刷新缓冲区
fp = NULL;
  1. 读文件 — fgetc()
// 打开成功返回地址,失败返回空
// w 文件存在清空打开,不存在新建
// r 不存在打开失败 
// w+ 读写
// a 追加,存在则追加(光标放到文件末尾),不存在新建
FILE *fp = fopen("demo.txt", "r");
if (NULL == fp)
{
    printf("%s\n", "打开失败");
    perror("fopen");
    return -1;
}else {
    printf("%s\n", "打开成功");
}

// 挨个字符写入
char tmp;
while((tmp = fgetc(fp)) != EOF)
{
    printf("%c\n", tmp);
}


fclose(fp); // 关闭文件,刷新缓冲区
fp = NULL;
  1. 文件末尾 — feof()
// 打开成功返回地址,失败返回空
// w 文件存在清空打开,不存在新建
// r 不存在打开失败 
// w+ 读写
// a 追加,存在则追加(光标放到文件末尾),不存在新建
FILE *fp = fopen("demo.txt", "r");
if (NULL == fp)
{
    printf("%s\n", "打开失败");
    perror("fopen");
    return -1;
}else {
    printf("%s\n", "打开成功");
}

char tmp;
// feof 只有在读取了文件内容之后才有意义,
// 否则永远返回假,也就是没有到末尾
while(!feof(fp))
{
    // 挨个字符写入
    tmp = fgetc(fp);
    printf("%c\n", tmp);
}

fclose(fp); // 关闭文件,刷新缓冲区
fp = NULL;
  1. 写入一行 — fputs()
// 打开成功返回地址,失败返回空
// w 文件存在清空打开,不存在新建
// r 不存在打开失败 
// w+ 读写
// a 追加,存在则追加(光标放到文件末尾),不存在新建
FILE *fp = fopen("demo.txt", "w");
if (NULL == fp)
{
    printf("%s\n", "打开失败");
    perror("fopen");
    return -1;
}else {
    printf("%s\n", "打开成功");
}

char * arr[] = {"噢噢噢噢\n", "年华村上春树\n", "scscscscaniacs\n"};

for (int i = 0; i < sizeof(arr)/sizeof(arr[0]); ++i)
{
    fputs(arr[i], fp);
}


fclose(fp); // 关闭文件,刷新缓冲区
fp = NULL;
  1. 读取一行 — fgets()
// fgets 读取遇到换行符或者文件结束符停止,
// 不会清空 buf 内容,所以会产生临界值问题,
// 需要使用 memeset 清空 buf
char buf[100];
fgets(buf, sizeof(buf), fp);
printf("%s", buf);
memset(buf, 0, sizeof(buf));
fgets(buf, sizeof(buf), fp);
printf("%s", buf);
memset(buf, 0, sizeof(buf));
fgets(buf, sizeof(buf), fp);
printf("%s", buf);
memset(buf, 0, sizeof(buf));
点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注