文件操作的一点探索

类别:编程语言 点击:0 评论:0 推荐:

#include<io.h>

#include<string.h>

#include<stdio.h>

#include<iostream.h>

int main(){

       int h;

   h=_creat("xin.txt", 0666);

     _creat("he.txt",0666);

       FILE *fp;

       char string[8];

       if((fp=fopen("xin.txt","rw"))==NULL)

       {printf("no");

      

       }

       printf("enter the content of the txt:");

       while(strlen(gets(string))>0)

       {

          fputs(string,fp);

          fputs("\n",fp);

        }

       printf("\nwhat you enter are:\n");

       while(fgets(string,81,fp)!=NULL)

              printf("%s",string);

       fclose(fp);

       return 1;

}

本来的意图是 从键盘输入字符,把字符存到文件中,同时在屏幕上显示存取到文件里面的字符的内容.  但是结果并不令人满意..虽然存到文件中了,但是并没有把内容给输出出来,也就是说 ,在

       while(fgets(string,81,fp)!=NULL)

              printf("%s",string);

这里有问题 . 看了看MSDN中关于流方面的函数 ,先看两个关键函数 fopen和fclose .

 

fopen的函数声明为:

FILE *fopen( const char *filename, const char *mode ); 它打开一个文件同时返回一个指向这个文件的指针 . 如果打开文件有错误,将返回一个NULL指针 .

Fclose函数声明为 :

int fclose( FILE *stream ); 它关闭了FILE*流 . 但是并不是说再执行了fclose之后,流中的数据才会写回到文件中 , 任何对流进行的操作,实际都是对文件进行的操作 . 当正常关闭一个流的时候, 函数返回 0 .

 

下面我们来看看获取输入的函数 : 

char *gets( char *buffer );函数从标准输入设备键盘上获得一行的输入 .

int fputs( const char *string, FILE *stream );函数向一个流中写入一个字符串.并把流指针向后移动相应位置 . 如果函数成功执行,则返回一个非负的值,否则返回EOF .

char *fgets( char *string, int n, FILE *stream );函数从一个流中读取字符串,并把流指针移到后面没读取的位置 . 如果发生错误或者读取到文件末端,函数会返回一个NULL .

 

为了便于调试信息,我把程序改为:

int main(){

    int h;

   h=_creat("xin.txt", 0666);

    _creat("he.txt",0666);

    FILE *fp;

    char string[8];

    if((fp=fopen("xin.txt","w"))==NULL)

    {printf("no");

   

    }

    printf("After fopen ,position is %d\n ",ftell(fp));

    printf("enter the content of the txt:");

    while(strlen(gets(string))>0)

    {

       fputs(string,fp);

       fputs("\n",fp);

       printf("After fputs, position is %d\n",ftell(fp));

     }

    printf("\nwhat you enter are:\n");

    //fseek(fp,0,SEEK_SET);

       //  rewind(fp);

    printf("Before output to screen ,position is %d\n",ftell(fp));

    fclose(fp);

    FILE *fp2=fopen("xin.txt","r");

    while(fgets(string,81,fp2)!=NULL)

    {

       printf("After fgets ,position is %d\n",ftell(fp2));

       printf("%s",string);

    }

    fclose(fp2);

    return 1;

}

这时候程序工作正常 . 原来是 fopen的模式的问题 . 应该改为 w+ ,同时要把原来的流的指针位置返回到 0 .

问题解决, 代码如下 :

int main(){

    int h;

   h=_creat("xin.txt", 0666);

    _creat("he.txt",0666);

    FILE *fp;

    char string[8];

    if((fp=fopen("xin.txt","w+"))==NULL)

    {

       printf("no");

    }

    printf("After fopen ,position is %d\n ",ftell(fp));

    printf("enter the content of the txt:");

    while(strlen(gets(string))>0)

    {

       fputs(string,fp);

       fputs("\n",fp);

       printf("After fputs, position is %d\n",ftell(fp));

     }

    printf("\nwhat you enter are:\n");

    //fseek(fp,0,SEEK_SET);

           rewind(fp);

    printf("Before output to screen ,position is %d\n",ftell(fp));

    while(fgets(string,81,fp)!=NULL)

    {

       printf("After fgets ,position is %d\n",ftell(fp));

       printf("%s",string);

    }

    fclose(fp);

    return 1;

}

 

[后记] 这个程序的主要问题在于对fopen打开文件的模式的了解和理解上,其次是关于流指针的问题 .

本文地址:http://com.8s8s.com/it/it26574.htm