文件学习8

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <stdlib.h>

#include <assert.h>

#include <string.h>

#include <errno.h>

//回顾 文件内容插入格式

const char* filemane = "a.txt";

void writeread(const char* content)

{

FILE* f = fopen(filemane, "w");

fputs(content, f);

fclose(f);

}

size_t getline()

{

FILE* f = fopen(filemane, "r");

fseek(f, 0, SEEK_END);

fpos_t pos1;

fgetpos(f, &pos1);

fclose(f);

return pos1;

}

void insert(const char* content, int pos)

{

FILE* f = fopen(filemane, "r+");

char* buf1 = new char[getline() + 1] {0};

fread(buf1, 1, getline(), f);

printf("%s\n", buf1);

//申请新的空间

//char* buf2 = new char[getline() +strlen(content)+ 1] {0};

char* buf2 = new char[getline() + strlen(content) + 1] {0};

//将pos前的数据写入到新的空间中

int i = 0;

for (; i < pos; i++)

{

buf2[i] = buf1[i];

}

//将新数据写入到新的空间中

for (int j = 0; j < strlen(content); j++)

{

buf2[i++] = content[j];

}

//将原内存剩下数据写入到新的空间中

for (int j = pos; j < getline(); j++)

{

buf2[i++] = buf1[j];

}

//移动文件光标到首部

fseek(f, 0, SEEK_SET);

fwrite(buf2, 1, getline() + strlen(content), f);

delete[] buf1;

fclose(f);

}

int main()

{

//writeread("hi,weabf");

printf("file size is %lld\n",getline());

insert("jack,", 3);

return 0;

}

//文件位置操作小结

//fseek(FILE*.int,int)//移动光标的位置

//fgetpos(FILE*,fpos_t*)//

//

//

int main()

{

FILE* f = fopen("a.txt", "w");

//1,在光标3的位置,替换内容为C

fpos_t pos = 3;

fsetpos(f, &pos);

fputc('c', f);

//2,尝试读取第5个字符位置的内容

pos = 7;

fsetpos(f, &pos);

int c = fgetc(f);

printf("%c", c);

//3,尝试读取当前位置后所有字符串的内容直到\n;

char str[32] = "";

fgets(str, 32, f);

printf("%s", str);

fclose(f);

}

//1.3 rewind的应用示例//将光标重置在文件首部

int main()

{

//打开D盘文件中的a.txt文件

FILE* f = fopen("d:\\a.txt", "r");

assert(f != NULL);

//读取一行数据

char buf[128] = "";

fgets(buf, 128, f);

printf("%s", buf);

//读取第一行第一个字符

rewind(f);

int c = fgetc(f);

printf("%c", c);

fclose(f);

}

//从文件中查找字符的函数

FILE* filp;

int findm(char c)

{

rewind(filp);

while (!feof(filp))

{

if (c == fgetc(filp))

{

return 1;

}

}

return 0;

}

int main()

{

filp = fopen("d:/a.txt", "r");

printf("%d\n", findm('2'));

printf("%d\n", findm('4'));

printf("%d\n", findm('8'));

printf("%d\n", findm('3'));

}

// 文件本身的操作

//1 删除文件 remove//成功返回0 其他失败

//2 文件重命名 rename//成功返回0 其他失败

int main()

{

//删除a.txt文件

int ret=remove("a.txt");

printf("%d", ret);

//将D盘中的a.txt重命名为a;

ret = rename("d:/a.txt", "d:/a");

return 0;

}

//文件的错误处理

//1 clearerr;

//重置给文件流的错误和EOF结束标志

//重置EOF->0;

int main()

{

FILE* f = fopen("a.txt", "w");

fputs("hi.1234\n", f);

rewind(f);

printf("%s", fgetc(f));

clearerr(f);

fclose(f);

}

//2 文件结束 feof

//3 文件错误 ferror

//4 打印错误 perror//打印最近IO操作的错误信息//#include<errno.h>

//void perror(9)

int main() {

FILE* f = fopen("d:\\a.txt", "r");

fputc('H', f);// 只读流不能写, errno=9

//errno == 0;

// errno为0时,表示无错误信息

printf("errno: %d-> %s\n", errno, strerror(errno));

//perror("error");

/*

printf("ferror() = %d\n", ferror(f));

clearerr(f);

printf("ferror() = %d\n", ferror(f));*/

fclose(f);

return 0;

}

相关推荐
炽烈小老头3 小时前
【每天学习一点算法 2026/03/17】括号生成
前端·学习·typescript
似水明俊德3 小时前
01-C#.Net-泛型-学习笔记
java·笔记·学习·c#·.net
今儿敲了吗4 小时前
python基础学习笔记第三章
笔记·python·学习
hua872224 小时前
Golang 构建学习
java·开发语言·学习
试试勇气6 小时前
Linux学习笔记(十七)--线程概念
linux·笔记·学习
weixin_458872616 小时前
东华复试OJ二刷复盘12
学习
·醉挽清风·7 小时前
学习笔记—Linux—文件系统
linux·笔记·学习
科技林总7 小时前
【系统分析师】12.1 软件架构的概念
学习
FC皇家慕尼黑7 小时前
Claude Code学习--从搭建Nano Claude Code学习CC机制的底层原理
学习·ai·claude code