文件操作函数
一.字符读写
字符读写主要使用两个函数fputc和fgetc,两个函数的原型是:
int fputc(int ch,FILE *fp);若写入成功则返回写入的字符,否则返回-1
int fgetc(FILE *fp); 若读取成功则返回读取的字符,否则返回-1
注意:
1)对于fputc函数和fgetc函数,每次操作,fputc只能写入1个字节的数据,无论参数ch多大,只将其低8位的数据写入到文件中;fgetc 每次只能返回一个字节的数据。
2)对于fgetc函数,若读取成功则返回读取到的字符,否则返回-1.这里面返回-1(即EOF)有两种情况:一种是读到文件结束已经没有任何字符可供读取了,另一种是读取出错。由于通常情况下,在文本文件中可显字符是不可能出现ASCII码为-1的字符,因此可以通过fgetc的返回结果判断文件是否结束(读取不出错的情况下)。但是在二进制文件中则不能这么判断了,因为二进制文件中很可能就含有FF这样的数据,如果将存储fgetc读取结果的变量ch定义为char型,则不能判断二进制文件是否结束,但是如果定义为int型,则同样可以判断,因为即使读取的字符是FF,但是由于ch是int型,则事实上ch=0x000000FF,并不等于-1,因此可以判断文件是否结束。(注意以上所述只在文件读取不出错的情况下成立,若文件读取出错,是不能这么判断文件是否结束,必须通过feof()函数来判断)
FILE *fp; fp = fopen("d:\\我的文档.txt","w+"); char c; char ch; if (fp != NULL) { c = fputc(65,fp); ch = fputc(321,fp); } printf("%c\n",c); printf("%c\n",ch);
输出结果为:
A
A
FILE *fp; fp = fopen("d:\\我的文档.txt","w+"); char str[]= "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; char str1[53] = {0}; int c; if (fp != NULL) { for (unsigned int i = 0; i < strlen(str); i++) { str1[i] = fputc(str[i],fp); } } printf("%s\n",str1); rewind(fp); while ((c = fgetc(fp)) != EOF) { printf("%c",c); } printf("\n"); fclose(fp);
输出结果为:
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
二.字符串读写
字符串读写主要涉及到两个函数fputs和fgets,这两个函数的原型是:
int fputs(const char *s,FILE *fp);
char *fgets(char *s,int n,FILE *fp);
对于fputs函数,将字符串写入文件,若写入成功则返回一个非负值,否则返回-1;
对于fgets函数,从文件中读取不超过n-1个字符到字符数组中(若文件中字符少于n-1个,则只读取文件中存在的字符),系统在字符数组末尾自动添加一个'\0',返回字符数组的首地址。
注意:1)对于fgets函数,在读取过程中,若读取到字符'\n',则读取过程提前结束.
FILE *fp; fp = fopen("d:\\我的文档.txt","w+"); char str[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; char str1[53] = {0}; char *str2; if (fp != NULL) { printf("ret = %d\n",fputs(str,fp)); }
rewind(fp); str2 = fgets(str1,strlen(str)+1,fp); printf("%s\n",str1); printf("%s\n",str2); fclose(fp);
输出结果为:
ret = 0
str1 = ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
str2 = ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

浙公网安备 33010602011771号