目录
一、
二、
一、
#include<stdio.h>
#include<string.h>
#include<stdlib.h> //#include<malloc.h>
typedef struct Person
{
char name[20];
char sex[4];
int age;
}Person;
int main()
{
//打开文件
FILE* fp = fopen("C:\\Users\\86176\\Desktop\\文件.txt",""); //这个函数在stdio.h里
//w:打开时清空
if(fp == NULL)
{
printf("打开文件失败\n");
}
//操作,fgetc函数读取完字符会将文件指针移动到下一个字符
// char ch = fgetc(fp);
// printf("%c\n",ch);
// ch = fgetc(fp);
// printf("%c\n",ch);
//读取全文
// char ch;
// while(EOF != (ch = fgetc(fp))) // fgetc():读到文件末尾返回EOF
// {
// printf("%c",ch);
// }
//读取一行
//fgets函数读取完字符也会将文件指针移动到下一个字符
// char str[200];// = {0}; //将数组中全部元素的值赋为0
// memset(str,0,sizeof(str)); //清零,同上
// char *p = fgets(str , 200 , fp); //此函数返回str ,读不到了就返回NULL
// printf("%s",str); //自动会换行
// printf("%s",p);
//while读取所有行
// char str[200];
// while(fgets(str,200,fp))
// {
// printf("%s",str);
// }
//fread函数——读取()个字符
//返回实际读取的大小
// int n = fread(str , 1 , 20 , fp);//读20个1字节的
// str[n] = '\0';
// printf("%s\n" , str);
//读取整个文件
// while(fread(str , 1 , 100 , fp))//读100个1字节的,读完(没读到)就返回0
// {
// printf("%s",str);
// }
//写入一个字符——w:清空写
// fputc('A',fp);
// fputc('A',fp);
//写入字符串
// char * str = "C:\\Users\\86176\\Desktop\\C语言程序设计\\blibli-文件\\文件1.c[Warning] character constant too long for its type\r";
// fputs(str , fp); //“写 ”操作是不会自动换行的 ,需要加 \n 换行
// fputs(str , fp);
// fputs(str , fp);
//fwrite函数——什么都能写
//写字符串
// fwrite(str , 1 , strlen(str) , fp);
//写结构体:
// Person p1 = {"张三","男",20};
// fwrite(&p1 , 1 , sizeof(p1) , fp); //文件指针:写完以后指针漂移到下一个
// fwrite(&p1 , 1 , sizeof(p1) , fp);
// fwrite(&p1 , 1 , sizeof(p1) , fp);
//写整数
// int num = 345678;
// fwrite(&num , sizeof(num), 6 , fp);
//
// //文件指针定位
// fseek(fp , 0 , SEEK_SET);
//
// int num2;
// fread(&num2 , sizeof(num) , 6 , fp);
// printf("%d",num2);
//文件定位:文件 读和写 完后,文件指针会移动到下一个字符 ,当我想从自定义的位置(例如文件开头\
第十个字符开始读 ),就用文件定位
//fseek函数的作用是重新定位文件读写指针的位置。
//fseek(文件指针,移动偏移量,哪个位置开始计算偏移量)
/* char str[200] = {0};
printf("\n--------文件开头:--------\n");
int num = fseek(fp , 10L ,SEEK_SET);
fread(str,1,100,fp);
printf("%s\n",str);
printf("\n--------当前位置:--------\n");
fseek(fp , -10L ,SEEK_CUR);
fread(str,1,100,fp);
printf("%s\n",str);
printf("\n--------文件末尾:--------\n");
str[200] = {0}; 这条语句不可用来清零,因为这是数组
memset(str,0,sizeof(str)); //对数组清零的语句。如果不清零,输完10字节之后将会输出当前位置的字符
fseek(fp , -20 , SEEK_END);
fread(str,1,10,fp);
printf("%s\n",str); */
//读取文件的最后一行
//如果读到的是\n,就停止读
char ch = 0;
int length = 0;
fseek(fp,-1,2);
while(fread(&ch , 1 , 1 , fp))
{
if(ch=='\n')
{
break;
}else
{
fseek(fp , -2 , 1);
// printf("%c",ch); 可以一个一个读
length++;
}
}
printf("\nlength = %d\n",length); //17
char *p = malloc(sizeof(char) * length + 1); //动态分配内存
memset(p , 0 , length+1);
fseek(fp,-length,2);
fread(p,1,length,fp);
printf("%s",p);
//输出倒数第二行
/* fseek(fp,-length+1,1);
int length1 = 0;
while(fread(&ch,1,1,fp))
{
if(ch == '\n')
{
break;
}else
{
fseek(fp,-2,1);
length1++;
}
}
printf("\nlentgh1 = %d\n",length1); //25 */
// rewind(fp);//文件指针重置到文件的开头
fseek(fp , 0 ,2);
int num1 = ftell(fp); //获取文件指针当前的位置
printf("\n文件大小:%d",num1); //378 通过右击txt →属性可验证正确性
//关闭文件
fclose(fp);
//释放内存
free(p);
}
二、
#include<stdio.h>
#include<process.h>
int main()
{
char ch;
FILE *fp;
/*
真实路径:C:\Users\86176\Desktop\CAONIMA.txt
\为转义字符所以变更为:
:C:\\Users\\86176\\Desktop\\CAONIMA.txt
*/
fp = fopen("C:\\Users\\86176\\Desktop\\CAONIMA.txt ","r+");
if(fp == NULL)
{
printf("打开失败");
exit(1); //exit(0):程序正常结束 exit(!0):程序异常结束
}
else
{
printf("打开成功啦!\n");
}
//
// printf("请输入一串字符(按#结束):");
//
// while((ch = getchar()) != '#')
// {
// fputc(ch,fp); //往文件中写入一个字符
// //两个参数 ch:要写入的字符,fp:指向文件的文件指针
// }
//
// printf("输入完毕,扣1读取文件,扣0关闭文件:");
// getchar();
// scanf("%c",&ch);
//
// if(ch == '1')
// {
ch=fgetc(fp);
while(ch != EOF)
{
putchar(ch);
ch=fgetc(fp);
}
// }
/*
fclose(fp) 一个参数 fp:文件指针
返回值: 0-代表正常结束 , -1 代表异常结束
EOF是stdio.h的宏定义常量,值为-1。 #define EOF (-1)
*/
if(fclose(fp)!=0)
{
printf("Can't close the file!\n");
}
else
{
printf("Close success!");
}
return 0;
}
|