#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()
{
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()
{
int ret=remove("a.txt");
printf("%d", ret);
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;
}