文件操作函数

一.字符读写

    字符读写主要使用两个函数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

 

参考海子博客:http://www.cnblogs.com/dolphin0520/

posted @ 2013-08-09 11:13  dingsd  阅读(548)  评论(0)    收藏  举报