精华内容
下载资源
问答
  • C语言中对文件最基本的读取和写入函数C语言read()函数:读文件函数(由已打开的文件读取数据)头文件:#include 定义函数:ssize_t read(int fd, void * buf, size_t count);函数说明:read()会把参数fd 所指的文件...

    C语言中对文件最基本的读取和写入函数

    C语言read()函数:读文件函数(由已打开的文件读取数据)头文件:

    #include

    定义函数:

    ssize_t read(int fd, void * buf, size_t count);

    函数说明:read()会把参数fd 所指的文件传送count 个字节到buf 指针所指的内存中. 若参数count 为0, 则read()不会有作用并返回0. 返回值为实际读取到的字节数, 如果返回0, 表示已到达文件尾或是无可读取的数据,此外文件读写位置会随读取到的字节移动.

    附加说明:

    如果顺利 read()会返回实际读到的字节数, 最好能将返回值与参数count 作比较, 若返回的字节数比要求读取的字节数少, 则有可能读到了文件尾、从管道(pipe)或终端机读? ?蛘呤莚ead()被信号中断了读取动作.

    当有错误发生时则返回-1, 错误代码存入errno 中, 而文件读写位置则无法预期.

    错误代码:

    EINTR 此调用被信号所中断.

    EAGAIN 当使用不可阻断I/O 时(O_NONBLOCK), 若无数据可读取则返回此值.

    EBADF 参数fd 非有效的文件描述词, 或该文件已关闭.

    C语言write()函数:写文件函数头文件:

    #include

    定义函数:

    ssize_t write (int fd, const void * buf, size_t count);

    函数说明:write()会把参数buf 所指的内存写入count 个字节到参数fd 所指的文件内. 当然, 文件读写位置也会随之移动.

    返回值:如果顺利write()会返回实际写入的字节数. 当有错误发生时则返回-1, 错误代码存入errno 中.

    错误代码:

    EINTR 此调用被信号所中断.

    EAGAIN 当使用不可阻断I/O 时 (O_NONBLOCK), 若无数据可读取则返回此值.

    EADF 参数fd 非有效的文件描述词, 或该文件已关闭.

    时间: 2015-08-28

    C语言stat()函数:获取文件状态 头文件: #include #include 定义函数: int stat(const char * file_name, struct stat *buf); 函数说明:stat()用来将参数file_name 所指的文件状态, 复制到参数buf 所指的结构中. 下面是struct stat 内各参数的说明: struct stat { dev_t st_dev; //device 文件的设备编

    C语言fread()函数:读文件函数(从文件流读取数据) 头文件: #include 定义函数: size_t fread(void * ptr, size_t size, size_t nmemb, FILE * stream); 函数说明:fread()用来从文件流中读取数据. 参数stream 为已打开的文件指针, 参数ptr 指向欲存放读取进来的数据空间, 读取的字符数以参数size*nmemb 来决定. Fread()会返回实际读取到的nmemb 数目, 如果此值

    fgets() 有局限性,每次最多只能从文件中读取一行内容,因为 fgets 遇到换行符就结束读取.如果希望读取多行内容,需要使用 fread 函数:相应地写入函数为 fwrite. fread() 函数用来从指定文件中读取块数据.所谓块数据,也就是若干个字节的数据,可以是一个字符,可以是一个字符串,可以是多行数据,并没有什么限制.fread() 的原型为: size_t fread ( void *ptr, size_t size, size_t count, FILE *fp ); fwri

    C语言getgrent()函数:从组文件中取得账号的数据 头文件: #include #include 定义函数: struct group * getgrent(void); 函数说明:getgrent()用来从组文件(/etc/group)中读取一项组数据, 该数据以group 结构返回. 第一次调用时会取得第一项组数据, 之后每调用一次就会返回下一项数据, 直到已无任何数据时返回NULL. struct group { char *

    1.建文件夹 int _mkdir(const char *path,mode_t mode); 函数名: _mkdir 功 能: 建立一个目录 用 法: int _mkdir( const char *dirname ); 头文件库:direct.h 返回值:创建一个目录,若成功则返回0,否则返回-1 ===================================================== 2.打开文件fopen() 函数功能: 打开一个文件 函数原型:FILE * fope

    C语言creat()函数:创建文件函数 头文件: #include #include #include 定义函数: int creat(const char * pathname, mode_tmode); 函数说明: 1.参数 pathname 指向欲建立的文件路径字符串. 2.Creat()相当于使用下列的调用方式调用open()     open(const char * pathname,

    C语言link()函数:建立文件连接 头文件: #include 定义函数: int link (const char * oldpath, const char * newpath); 函数说明:link()以参数newpath 指定的名称来建立一个新的连接(硬连接)到参数oldpath 所指定的已存在文件. 如果参数newpath 指定的名称为一已存在的文件则不会建立连接. 返回值:成功则返回0, 失败返回-1, 错误原因存于errno. 附加说明:link()所建立

    问题 你要写C扩展来读取来自任何Python类文件对象中的数据(比如普通文件.StringIO对象等). 解决方案 要读取一个类文件对象的数据,你需要重复调用 read() 方法,然后正确的解码获得的数据. 下面是一个C扩展函数例子,仅仅只是读取一个类文件对象中的所有数据并将其输出到标准输出: #define CHUNK_SIZE 8192 /* Consume a "file-like" object and write bytes to stdout */ static PyObj

    oracle中sql语句(+)符号代表连接 (+)在=前边为右连接 (+)在=后边为左连接 SELECT a.*, b.* from a(+) = b就是一个右连接,等同于select a.*, b.* from a right join b SELECT a.*, b.* from a = b(+)就是一个左连接,等同于select a.*, b.* from a left join b 内连接 常用的连接运算符=.<.> 使用比较运算符根据每个表共有的列的值匹配两个表中的行 外连接 左连接

    下面两个文件:

    图像尺寸

    C语言bcopy()函数:复制内存(字符串) 头文件: #include bcopy() 函数用来复制内存(字符串),其原型为: void bcopy(const void *src, void *dest, int n); [参数]src 为源内存块(字符串)指针,dest 为目标内存块(字符串)指针,n 为要复制的内存(字符串)的前 n 个字节长度. bcopy()与memcpy()一样都是用来拷贝src 所指的内存内容前n 个字节到dest 所指的地址,不过参数sr

    平时我们需要在手机上面存储想音频,视频等等的大文件,以前学过使用File进行存储(使用File操作进行存储):由于考虑到手机本身的存储空间小,这时候我们需要把文件存储在SDcard中,今天自己也学习了一下在android进行sdcard的存储使用方法; 首先如果要在程序中使用sdcard进行存储,我们必须要在AndroidManifset.xml文件进行下面的权限设置: 在AndroidManifest.xml中加入访问SDCard的权限如下:

    展开全文
  • C语言文件操作函数大全相关函数 feof fgetc(由文件中读取一个字符)表头文件 #include 相关函数 open,fread,fscanf,getc定义函数 void clearerr(FILE * stream); 表头文件 include函数说明 clearerr()清除参数...

    C语言文件操作函数大全

    相关函数 feof    fgetc(由文件中读取一个字符)

    表头文件 #include    相关函数 open,fread,fscanf,getc

    定义函数 void clearerr(FILE * stream);    表头文件 include

    函数说明 clearerr()清除参数stream指定的文件流所使   定义函数 nt fgetc(FILE * stream);

    用的错误旗标。    函数说明 fgetc()从参数stream所指的文件中读取一个字   返回值 EOF。

    fclose(关闭文件)    返回值 getc()会返回读取到的字符,若返回EOF则表示   相关函数 close,fflush,fopen,setbuf

    表头文件 #include    范例

    定义函数 int fclose(FILE * stream);    #include

    函数说明 fclose()用来关闭先前fopen()打开的文件。此动    main()

    作会让缓冲区内的数据写入文件中,并释放系统所提供的文件    {

    资源。     FILE *fp;

    返回值 若关文件动作成功则返回0,有错误发生时则返    int c;

    回EOF并把错误代码存到errno。     fp=fopen(“exist”,”r”);

    错误代码 EBADF表示参数stream非已打开的文件。     while((c=fgetc(fp))!=EOF)

    范例 请参考fopen()。     printf(“%c”,c);

    fdopen(将文件描述词转为文件指针)     fclose(fp);

    相关函数 fopen,open,fclose     }

    表头文件 #include    fgets(由文件中读取一字符串)

    定义函数 FILE * fdopen(int fildes,const char * mode);    相关函数 open,fread,fscanf,getc

    函数说明 fdopen()会将参数fildes 的文件描述词,转换   表头文件 include

    为对应的文件指针后返回。参数mode 字符串则代表着文件指   定义函数 har * fgets(char * s,int size,FILE * stream);

    针的流形态,此形态必须和原先文件描述词读写模式相同。关   函数说明 fgets()用来从参数stream所指的文件内读入字于mode 字符串格式请参考fopen()。 s所指的内存空间,直到出现换行字符、读到文   返回值 转换成功时返回指向该流的文件指针。失败则返size-1个字符为止,最后会加上NULL作为字回NULL,并把错误代码存在errno中。

    范例    返回值 gets()若成功则返回s指针,返回NULL则表示   #include

    main()    范例

    {    #include

    FILE * fp =fdopen(0,”w+”);     main()

    fprintf(fp,”%s\n”,”hello!”);     {

    fclose(fp);     char s[80];

    }     fputs(fgets(s,80,stdin),stdout);

    执行 hello!     }

    feof(检查文件流是否读到了文件尾)    执行 this is a test /*输入*/

    相关函数 fopen,fgetc,fgets,fread    this is a test /*输出*/

    表头文件 #include    fileno(返回文件流所使用的文件描述词)

    定义函数 int feof(FILE * stream);    相关函数 open,fopen

    函数说明 feof()用来侦测是否读取到了文件尾,尾数   表头文件 #include

    stream为fopen()所返回之文件指针。如果已到文件尾则返   定义函数 int fileno(FILE * stream);

    回非零值,其他情况返回0。    函数说明 fileno()用来取得参数stream指定的文件流所   返回值 返回非零值代表已到达文件尾。

    fflush(更新缓冲区)    返回值 返回文件描述词。

    相关函数 write,fopen,fclose,setbuf    范例

    表头文件 #include    #include

    定义函数 int fflush(FILE* stream);     main()

    函数说明 fflush()会强迫将缓冲区内的数据写回参数    {

    stream指定的文件中。如果参数stream为NULL,fflush()会将    FILE * fp;

    所有打开的文件数据更新。     int fd;

    返回值 成功返回0,失败返回EOF,错误代码存于errno    fp=fopen(“/etc/passwd”,”r”);

    中。     fd=fileno(fp);

    错误代码 EBADF 参数stream 指定的文件未被打开,或    printf(“fd=%d\n”,fd);

    打开状态为只读。其它错误代码参考write()。     fclose(fp);

    }     int i;

    执行 fd=3     fp= fopen(“noexist”,”w”);

    fopen(打开文件)     for(i=0;i<26;i++)

    相关函数 open,fclose     fputc(a,fp);

    表头文件 #include     fclose(fp);

    定义函数 FILE * fopen(const char * path,const char  *    }

    mode);    fputs(将一指定的字符串写入文件内)

    相关函数 fopen,fwrite,fscanf,fputc,putc

    函数说明 参数path字符串包含欲打开的文件路径及文件名,   表头文件 #include

    参数mode字符串则代表着流形态。    定义函数 int fputs(const char * s,FILE * stream);

    mode有下列几种形态字符串:    函数说明 fputs()用来将参数s所指的字符串写入到参数   r 打开只读文件,该文件必须存在。 所指的文件内。

    r+ 打开可读写的文件,该文件必须存在。    返回值 若成功则返回写出的字符个数,返回EOF则表   w 打开只写文件,若文件存在则文件长度清为0,即该

    文件内容会消失。若文件不存在则建立该文件。    范例 请参考fgets()。

    w+ 打开可读写文件,若文件存在则文件长度清为零,即   fread(从文件流读取数据)

    该文件内容会消失。若文件不存在则建立该文件。    相关函数 fopen,fwrite,fseek,fscanf

    a 以附加的方式打开只写文件。若文件不存在,则会建   表头文件 #include

    立该文件,如果文件存在,写入的数据会被加到文件尾,即文   定义函数 size_t fread(void * ptr,size_t size,size_t 件原先的内容会被保留。    a+ 以附加方式打开可读写的文件。若文件不存在,则会   函数说明 fread()用来从文件流中读取数据。参数stream建立该文件,如果文件存在,写入的数据会被加到文件尾后,ptr 指向欲存放读取进来的数据空即文件原先的内容会被保留。 size*nmemb来决定。Fread()会返回   上述的形态字符串都可以再加一个b字符,如rb、w+bnmemb数目,如果此值比参数nmemb 来得小,或ab+等组合,加入b 字符用来告诉函数库打开的文件为二feof()或进制文件,而非纯文字文件。不过在POSIX系统,包含Linux来决定发生什么情况。

    都会忽略该字符。由fopen()所建立的新文件会具有   返回值 返回实际读取到的nmemb数目。

    S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(   附加说明

    0666)权限,此文件权限也会参考umask值。    范例

    返回值 文件顺利打开后,指向该流的文件指针就会被返   #include

    回。若果文件打开失败则返回NULL,并把错误代码存在errno     #define nmemb 3

    中。     struct test

    附加说明 一般而言,开文件后会作一些文件读取或写入    {

    的动作,若开文件失败,接下来的读写动作也无法顺利进行,    char name[20];

    所以在fopen()后请作错误判断及处理。     int size;

    范例     }s[nmemb];

    #include     int main(){

    main()     FILE * stream;

    {     int i;

    FILE * fp;     stream = fopen(“/tmp/fwrite”,”r”);

    fp=fopen(“noexist”,”a+”);     fread(s,sizeof(struct test),nmemb,stream);

    if(fp= =NULL) return;     fclose(stream);

    fclose(fp);     for(i=0;i

    }

    fputc(将一指定字符写入文件流中) “name[%d]=%-20s:size[%d]=%d\n”,i,s.name,i,s.size);    相关函数 fopen,fwrite,fscanf,putc     }

    表头文件 #include    执行

    定义函数 int fputc(int c,FILE * stream);    name[0]=Linux! size[0]=6

    函数说明 fputc 会将参数c 转为unsigned char 后写入   name[1]=FreeBSD! size[1]=8

    参数stream 指定的文件中。    name[2]=Windows2000 size[2]=11

    返回值 fputc()会返回写入成功的字符,即参数c。若返   freopen(打开文件)

    回EOF则代表写入失败。    相关函数 fopen,fclose

    范例    表头文件 #include

    #include    定义函数 FILE * freopen(const char * pathconst char *     main()     {    函数说明 参数path字符串包含欲打开的文件路径及文    FILE * fp; 参数mode请参考fopen()说明。参数stream为已打开的    char a[26]=”abcdefghijklmnopqrstuvwxyz”; Freopen()会将原stream所打开的文件流关闭,然后

    打开参数path的文件。 为已打开的文件指针。

    #include    返回值 当调用成功时则返回目前的读写位置,若有错误    main() -1,errno会存放错误代码。

    {    错误代码 EBADF 参数stream无效或可移动读写位置的    FILE * fp;

    fp=fopen(“/etc/passwd”,”r”);    范例 参考fseek()。

    fp=freopen(“/etc/group”,”r”,fp);    fwrite(将数据写至文件流)

    fclose(fp);    相关函数 fopen,fread,fseek,fscanf

    }    表头文件 #include

    fseek(移动文件流的读写位置)    定义函数 size_t fwrite(const void * ptr,size_t size,size_t    相关函数 rewind,ftell,fgetpos,fsetpos,lseek    表头文件 #include    函数说明 fwrite()用来将数据写入文件流中。参数stream   定义函数 int fseek(FILE * stream,long offset,int whence); ptr 指向欲写入的数据地址,总共   函数说明 fseek()用来移动文件流的读写位置。参数size*nmemb来决定。Fwrite()会返回实际stream为已打开的文件指针,参数offset为根据参数whencenmemb数目。

    来移动读写位置的位移数。    返回值 返回实际写入的nmemb数目。

    参数 whence为下列其中一种:    范例

    SEEK_SET从距文件开头offset位移量为新的读写位置。   #include

    SEEK_CUR 以目前的读写位置往后增加offset个位移量。     #define set_s (x,y)    SEEK_END将读写位置指向文件尾后再增加offset个位移量。     #define nmemb 3

    当whence值为SEEK_CUR 或SEEK_END时,参数offset    struct test

    允许负值的出现。     {

    下列是较特别的使用方式:     char name[20];

    1) 欲将读写位置移动到文件开头时:fseek(FILE     int size;

    *stream,0,SEEK_SET);     }s[nmemb];

    2) 欲将读写位置移动到文件尾时:fseek(FILE     main()

    *stream,0,0SEEK_END);     {

    返回值 当调用成功时则返回0,若有错误则返回-1,errno    FILE * stream;

    会存放错误代码。     set_s(0,”Linux!”);

    附加说明 fseek()不像lseek()会返回读写位置,因此必须    set_s(1,”FreeBSD!”);

    使用ftell()来取得目前读写的位置。     set_s(2,”Windows2000.”);

    范例     stream=fopen(“/tmp/fwrite”,”w”);

    #include     fwrite(s,sizeof(struct test),nmemb,stream);

    main()     fclose(stream);

    {     }

    FILE * stream;    执行 参考fread()。

    long offset;    getc(由文件中读取一个字符)

    fpos_t pos;    相关函数 read,fopen,fread,fgetc

    stream=fopen(“/etc/passwd”,”r”);    表头文件 #include

    fseek(stream,5,SEEK_SET);    定义函数 int getc(FILE * stream);

    printf(“offset=%d\n”,ftell(stream));    函数说明 getc()用来从参数stream所指的文件中读取一    rewind(stream); EOF。虽然getc()与    fgetpos(stream,&pos); 作用相同,但getc()为宏定义,非真正的函数调用。     printf(“offset=%d\n”,pos);    返回值 getc()会返回读取到的字符,若返回EOF则表示    pos=10;

    fsetpos(stream,&pos);    范例 参考fgetc()。

    printf(“offset = %d\n”,ftell(stream));    getchar(由标准输入设备内读进一字符)

    fclose(stream);    相关函数 fopen,fread,fscanf,getc

    }    表头文件 #include

    执行 offset = 5    定义函数 int getchar(void);

    offset =0    函数说明 getchar()用来从标准输入设备中读取一个字   offset=10 unsigned char转换成int后返回。

    ftell(取得文件流的读取位置)    返回值 getchar()会返回读取到的字符,若返回EOF则表   相关函数 fseek,rewind,fgetpos,fsetpos

    表头文件 #include    附加说明 getchar()非真正函数,而是getc(stdin)宏定义。    定义函数 long ftell(FILE * stream);

    函数说明 ftell()用来取得文件流目前的读写位置。参数   #include

    main()    相关函数 fopen,fwrite,fscanf,fputc

    {    表头文件 #include

    FILE * fp;    定义函数 int putchar (int c);

    int c,i;    函数说明 putchar()用来将参数c字符写到标准输出设    for(i=0li<5;i++)

    {    返回值 putchar()会返回输出成功的字符,即参数c。若    c=getchar(); EOF则代表输出失败。

    putchar(c);    附加说明 putchar()非真正函数,而是putc(c,stdout)宏定    }

    }    范例 参考getchar()。

    执行 1234 /*输入*/    rewind(重设文件流的读写位置为文件开头)    1234 /*输出*/    相关函数 fseek,ftell,fgetpos,fsetpos

    gets(由标准输入设备内读进一字符串)    表头文件 #include

    相关函数 fopen,fread,fscanf,fgets    定义函数 void rewind(FILE * stream);

    表头文件 #include    函数说明 rewind()用来把文件流的读写位置移至文件开   定义函数 char * gets(char *s); stream为已打开的文件指针。此函数相当于调用   函数说明 gets()用来从标准设备读入字符并存到参数s。

    所指的内存空间,直到出现换行字符或读到文件尾为止,最后   返回值

    加上NULL作为字符串结束。    范例 参考fseek()

    返回值 gets()若成功则返回s指针,返回NULL则表示   setbuf(设置文件流的缓冲区)

    有错误发生。    相关函数 setbuffer,setlinebuf,setvbuf

    附加说明 由于gets()无法知道字符串s的大小,必须遇   表头文件 #include

    到换行字符或文件尾才会结束输入,因此容易造成缓冲溢出的   定义函数 void setbuf(FILE * stream,char * buf);

    安全性问题。建议使用fgets()取代。    函数说明 在打开文件流后,读取内容之前,调用setbuf()   范例 参考fgets() stream为指定的文件流,    mktemp(产生唯一的临时文件名) buf指向自定的缓冲区起始地址。如果参数buf为NULL   相关函数 tmpfile 指,则为无缓冲IO。Setbuf()相当于调   表头文件 #include 用   定义函数 char * mktemp(char * template);    返回值

    函数说明 mktemp()用来产生唯一的临时文件名。参数   setbuffer(设置文件流的缓冲区)

    template所指的文件名称字符串中最后六个字符必须是   相关函数 setlinebuf,setbuf,setvbuf

    XXXXXX。产生后的文件名会借字符串指针返回。    表头文件 #include

    返回值 文件顺利打开后,指向该流的文件指针就会被返   定义函数 void setbuffer(FILE * stream,char * buf,size_t 回。如果文件打开失败则返回NULL,并把错误代码存在errno中。    函数说明 在打开文件流后,读取内容之前,调用   附加说明 参数template所指的文件名称字符串必须声明可用来设置文件流的缓冲区。

    为数组,如:    参数stream为指定的文件流,参数buf指向自定的缓冲   char template[ ]=”template-XXXXXX”; size为缓冲区大小。

    不可用char * template=”template-XXXXXX”;    返回值

    范例    setlinebuf(设置文件流为线性缓冲区)

    #include    相关函数 setbuffer,setbuf,setvbuf

    main()    表头文件 #include

    {    定义函数 void setlinebuf(FILE * stream);

    char template[ ]=”template-XXXXXX”;    函数说明 setlinebuf()用来设置文件流以换行为依据的无    mktemp(template); IO。相当于调用:setvbuf(stream,(char * )NULL,_IOLBF,0);    printf(“template=%s\n”,template); setvbuf()。

    }    返回值

    putc(将一指定字符写入文件中)    setvbuf(设置文件流的缓冲区)

    相关函数 fopen,fwrite,fscanf,fputc    相关函数 setbuffer,setlinebuf,setbuf

    表头文件 #include  #include

    定义函数 int putc(int c,FILE * stream);    定义函数 int setvbuf(FILE * stream,char * buf,int    函数说明 putc()会将参数c转为unsigned char后写入参数stream指定的文件中。虽然putc()与fputc()作用相同,但putc()   函数说明 在打开文件流后,读取内容之前,调用setvbuf()为宏定义,非真正的函数调用。 stream为指定的文件流,   返回值 putc()会返回写入成功的字符,即参数c。若返回buf指向自定的缓冲区起始地址,参数size为缓冲区大小,EOF则代表写入失败。 mode有下列几种

    范例 参考fputc()。    _IONBF 无缓冲IO

    putchar(将指定的字符写到标准输出设备)    _IOLBF 以换行为依据的无缓冲IO

    _IOFBF 完全无缓冲IO。如果参数buf为NULL指针,则为无缓冲IO。

    返回值

    ungetc(将指定字符写回文件流中)

    相关函数 fputc,getchar,getc

    表头文件 #include

    定义函数 int ungetc(int c,FILE * stream);

    函数说明 ungetc()将参数c字符写回参数stream所指定的文件流。这个写回的字符会由下一个读取文件流的函数取得。

    返回值 成功则返回c 字符,若有错误则返回EOF。

    转载请保留出处,http://www.sodocs.net/doc/60057321af45b307e8719768.html

    展开全文
  • 初识C语言时,对文件输入输出模块并没有仔细去看,大致浏览了一遍就这样翻过去了 因为考试也不考,所以何必费那些闲工夫啊! 现在看来,C语言文件输入输出模块对于一名程序员来说是非常有用的东西,没有这些,所有...

    初识C语言时,对文件输入输出模块并没有仔细去看,大致浏览了一遍就这样翻过去了 因为考试也不考,所以何必费那些闲工夫啊! 现在看来,C语言的文件输入输出模块对于一名程序员来说是非常有用的东西,没有这些,所有的操作只能说是纸上谈兵,关机之后统统的见鬼去了!近来想想,C语言这东西,挺适合自己自学的,并不是说明个人资质不错,只是学校教的东西,完全可以自己从书上获取,重要的是我们要用自己的双手成就自己的程序! 只有自己亲自实践过,才有自己的体会,这些东西可是灰常重要的!  好了,开始正题!

    一、fgetc()与fputc()

    #include "stdio.h"

    #include "stdlib.h"

    void writefile(FILE *fp)

    {

    char ch;

    printf("请输入文件内容,以#结束! \n");

    ch=getchar();

    while(ch!='#')

    {

    fputc(ch,fp);                                    // fputc(ch,fp)

    ch=getchar();

    }

    rewind(fp);

    }

    void readfile(FILE *fp)

    {

    char ch;

    printf("读取文件内容:\n");

    ch=fgetc(fp);

    while(!feof(fp))

    {

    putchar(ch);

    ch=fgetc(fp);                                    // ch=fgets(fp)

    }

    printf("\n文件读取结束\n");

    }

    int main()

    {

    FILE * fp;

    char inputfile[20];

    printf("请输入文件名:");

    gets(inputfile);

    fp=fopen(inputfile,"w+");

    if(fp==NULL)

    {

    printf("打开文件失败!");

    exit (1);

    }

    else

    {

    printf("打开%s成功!\n",inputfile);

    }

    writefile(fp);

    readfile(fp);

    fclose(fp);

    return 0;

    }

    ●  fgetc()格式 变量=fgetc(文件指针) fputc()格式 fput(字符量,文件指针)

    ●  若读写失败,都会返回符号常量EOF(在stdio.h中定义),值为-1

    ●  getc()与fgetc()功能相同,putc()与fputc()功能相同

    二、fgets()与fputs()

    #include "stdio.h"

    #include "stdlib.h"

    int main()            //编程实现文件的复制

    {

    FILE *fp;

    char str[100],s[100],filename[50];

    printf("请输入字符串:\n");

    gets(str);

    printf("请输入文件所在路径及名称:\n");

    scanf("%s",filename);

    if((fp=fopen(filename,"ab"))!=NULL)

    {

    fputs(str,fp);                              // fputs(str,fp)  把字符串str写入到文件中

    fclose(fp);

    }

    else

    {

    printf("打开失败!");

    exit(0);

    }

    if((fp=fopen(filename,"rb"))!=NULL)

    {

    printf("%s文件的内容是:\n",filename);

    while(fgets(s,sizeof(s),fp))                // fgets(str,n,fp)  从文件读出n-1字符串到str

    {

    printf("%s",s);

    }

    fclose(fp);

    }

    return 0;

    }

    ●  调用格式 fgets(字符数组名,n,文件指针) fputs(字符串,文件指针)

    ●  fgets()会把n-1个字符复制到字符数组里,而不是n个

    三、fscanf()与fprintf()

    #include "stdio.h"

    #include "stdlib.h"

    struct rec

    {

    char id[10];

    char name[20];

    float price;

    int count;

    };

    // 将键盘输入的信息写到文件中

    void writefile(FILE *fp,int n)

    {

    int i;

    struct rec record;                                         // 用作缓冲

    printf("******************请输入商品数据********************\n");

    for(i=0;i

    {

    printf("请输入序号:");

    scanf("%s",record.id);

    printf("请输入名称:");

    scanf("%s",record.name);

    printf("请输入价格:");

    scanf("%f",&record.price);

    printf("请输入数量:");

    scanf("%d",&record.count);

    fprintf(fp,"%s  %s  %.2f    %d \n",record.id,record.name,record.price,

    record.count);

    }

    }

    // 从文件读出商品信息

    void readfile(FILE *fp,int n)

    {

    struct rec record;                                       // 用作缓冲

    double total =0;

    rewind(fp);

    while(fscanf(fp,"%s %s %f %d\n",record.id,record.name,

    &record.price,&record.count)!=EOF)

    {

    printf("序号:%s 名称:%s 价格:%5.2f 数量:%d \n",record.id,record.name,

    record.price,record.count);

    total=total+record.price*record.count;

    }

    printf("合计:%5.2f",total);

    }

    int main()

    {

    char filename[20];

    int n;

    FILE * fp;

    printf("请输入目标文件:\n");

    scanf("%s",filename);

    printf("请输入商品数量:\n");

    scanf("%d",&n);

    fp=fopen(filename,"w+");

    if(fp==NULL)

    {

    printf("打开文件失败!");

    exit(1);

    }

    writefile(fp,n);

    readfile(fp,n);

    fclose(fp);

    return 0;

    }

    ●  调用格式 fscanf(文件指针,格式字符串,输入参数)  如:fscanf(fp,"%d %s",&i,str)

    fprintf(文件指针,格式字符串,输出参数列表) 如:fprintf(fp,"%d %s",i,str)

    ●  该程序在主函数完成打开、关闭文件 在被调函数中定义缓冲结构体用于数据的输入输出

    四、fread()与fwrite()

    #include "stdio.h"

    #include "stdlib.h"

    struct rec

    {

    char id[10];

    char name[20];

    float price;

    int count;

    };

    // 将键盘输入的信息写到文件中

    void writefile(FILE *fp,int n)

    {

    int i;

    struct rec record;                                         // 用作缓冲

    printf("******************请输入商品数据********************\n");

    for(i=0;i

    {

    printf("请输入序号:");

    scanf("%s",record.id);

    printf("请输入名称:");

    scanf("%s",record.name);

    printf("请输入价格:");

    scanf("%f",&record.price);

    printf("请输入数量:");

    scanf("%d",&record.count);

    // fprintf(fp,"%s  %s  %.2f    %d \n",record.id,record.name,record.price,

    //      record.count);

    fwrite(&record,sizeof(record),1,fp);

    }

    }

    // 从文件读出商品信息

    void readfile(FILE *fp,int n)

    {

    struct rec record;                                       // 用作缓冲

    double total =0;

    rewind(fp);

    // while(fscanf(fp,"%s %s %f %d\n",record.id,record.name,

    //          &record.price,&record.count)!=EOF)

    while(fread(&record,sizeof(record),1,fp))

    {

    printf("序号:%s 名称:%s 价格:%5.2f 数量:%d \n",record.id,record.name,

    record.price,record.count);

    total=total+record.price*record.count;

    }

    printf("合计:%5.2f",total);

    }

    int main()

    {

    char filename[20];

    int n;

    FILE * fp;

    printf("请输入目标文件:\n");

    scanf("%s",filename);

    printf("请输入商品数量:\n");

    scanf("%d",&n);

    fp=fopen(filename,"ab+");

    if(fp==NULL)

    {

    printf("打开文件失败!");

    exit(1);

    }

    writefile(fp,n);

    readfile(fp,n);

    fclose(fp);

    return 0;

    }

    ●  格式 fwrite(buffer,size,count,fp) fread(buffer,size,count,fp)

    ●  buffer 存放输入输出数据的首地址 size 数据块的大小(字节数) count 数据块的个数

    ●  读写成功返回值都是count的值 失败返回0 可以依据此判断文件是否读写结束

    Summary:

    1. fgetc与fputc 用于读写单个字符

    2. fgets与fputs 用于读写一个字符串

    3. fscanf与fprintf 用于格式化读写数据块

    4. fread与fwrite 用于非格式化读写二进制文件

    阅读(2129) | 评论(0) | 转发(1) |

    展开全文
  • 文件这个名词我相信大家都不陌生,基本就是常用名词,而且指代的范畴很广,比如你的毕业设计,理论等文章、电脑上的各种软件或程序都可以叫文件,不多说反正很广,今天主要讲的文件就是C语言程序设计很重要的一个...

    130188646_1_20180414031014347.jpg

    文件这个名词我相信大家都不陌生,基本就是常用名词,而且指代的范畴很广,比如你的毕业设计,理论等文章、电脑上的各种软件或程序都可以叫文件,不多说反正很广,今天主要讲的文件就是C语言程序设计中很重要的一个概念,不管你是什么程序,当然就要数据处理,而要实现数据处理往往是要通过文件形式来完成,所以首先熟悉与文件处理相关的操作函数是很重要的。

    一、文件简述以及处理形式:

    “文件'一般是指存储在外部介质中一组相关数据的有序集合,而这个数据集有一个名称,叫做文件名。实际上使用用电脑或在用手机也就是在使用文件。通过文件可以把有用的信息永久保存起来。

    所有文件都通过流进行输入输出操作,文件按照编码方式分为文本文件(ASCII码)跟二进制文件(二进制编码方式)。

    从用户角度分为普通文件(驻留在磁盘或其他外部介质上的有序数据集)与设备文件(与主机相连的各种外部设备什么显示器、打印机等)。

    按照内容分:数据文件、源程序、目标文件、可执行文件等等。

    C语言中文件处理形式有两种:缓冲区与非缓冲区两种。

    举个例子:如搬砖,你要从A点把砖移动到B点,如果你一块一块的搬,那么既耗时又费力,解决办法是你用一辆推车,按你能力把推车加适量的砖头,然后一起移动到B点,这样效率就高很多,同理要是CPU输出一个字符,磁盘就读取一个,那效率就会很低,而缓冲区的设定,可以有效解决此问题,示意图如下:

    130188646_2_20180414031014566.jpg

    缓冲文件读写

    至于非缓冲文件很明了,就是系统不会自动为文件操作开辟缓冲区。

    二、文件指针:

    我们电脑中有若干文件,那么我们如何访问某一特定的文件呢?如何定位该文件呢?这个时候就需要文件指针访问文件了它是指向文件有关信息的指针,比如文件名、当前位置和状态等等,当然这些信息不用说肯定保存在一个结构体变量之中,其声明如下:

    130188646_3_20180414031014738.jpg

    文件型结构体

    它由系统定义,在头文件stdio.h中。

    声明一个文件指针一般形式如下:

    FILE *指针变量名。

    130188646_4_20180414031014956.jpg

    ​三、打开文件函数-fopen()函数:

    fopen()函数用来打开一个文件,其一般形式如下:

    130188646_5_20180414031015128.jpg

    fopen()函数一般形式

    其中文件名是是要被打开的文件名,当然也可以是文件的路径,如'D:\text.txt',至于文件使用方式那就看下表:

    130188646_6_20180414031015363.jpg

    文件使用方式表

    如要打开D盘的text.txt文件并且只读属性:

    FILE *fp;

    fp=fopen('D:\text.txt',”r');

    如果文件打开成功则函数指向指定文件的指针,如果打开失败则返回NULL。

    四、文件的关闭-fclose()函数:

    文件在使用完毕后应该将其关闭,以免因为没有关闭而造成数据流失。关闭文件函数一般形式如下:

    fclose(文件指针);

    如要关闭上面打开的文件可使用,fclose(fp);

    要是关闭成功则返回0,否则返回EOF(-1)。

    五、fputc()函数:

    该函数的作用是向指定文件中写入一个字符,其一般形式如下:

    fputc(ch,fp)

    其中ch是要写入文件的字符,fp是文件指针,如果函数输出成功,则返回写入文件的字符,否则返回EOF。

    测试程序:

    130188646_7_20180414031015660.jpg

    fputc测试代码

    输入一个字符'k'输出结果:

    130188646_8_20180414031015863.jpg

    130188646_9_2018041403101682.jpg

    可以看到在D盘下a.txt文件中出现了k。

    130188646_10_20180414031016347.jpg

    ​六、fgetc()函数:

    先一般形式为:

    int fgetc(文件指针)

    该函数的作用是从指定文件中读取一个字符,返回值为读取的字符值,如果遇到文件结束符则返回EOF。

    测试程序:

    130188646_11_20180414031016722.jpg

    fgetc测试程序

    结果为:

    130188646_12_20180414031016956.jpg

    130188646_13_20180414031017144.jpg

    注意:文件必须以读或读写的方式打开。

    七、fputs()函数:

    一般形式如下:

    int fputs(需要送入流的字符串,文件指针)

    其中,第一个参数可以是字符串常量、字符数组名、指针或者变量。

    其作用是向指定的文件中写入一个字符串,成功输入返回0,否则返回EOF。

    测试代码:

    130188646_14_20180414031017378.jpg

    输入i love you!,得出结果:

    130188646_15_20180414031017613.jpg

    130188646_16_20180414031017785.jpg

    八、fgets()函数:

    其一般形式为:

    char *fgets(字符型指针,n,文件指针)

    该函数的作用是从指定文件中读取一个字符串到字符型指针指向的内存中,n表示所得字符串中字符的个数。fgets()函数有很多需要注意的地方,现在根据示例一点一点说,首先看一下测试代码:

    130188646_17_20180414031017988.jpg

    文件内容

    130188646_18_20180414031018222.jpg

    测试结果:

    130188646_19_20180414031018441.jpg

    从结果可以看出,我们输入的n=8,输出7个字符,原因就是后面有一个''字符,这是大家都知道的,我们输入的n小于文件中第一行字符的个数,要是我们输入的数大于第一行的字符个数会产生什么结果呢?测试一下吧,从输入中发现,光比第一行字符数大1,结果不变,当我们输入大于等于28时(至少2时)结果发生了变化,结果如图:

    130188646_20_20180414031018613.jpg

    居然自动换行了?奇怪!其实文件本身后面就有一个换行符,用来保存的字符串数组中的字符后两个元素是' '与'',所以产生了换行。当然要是你想继续读取下一行,你只有在上面的程序中在加一句fgets语句或循环,因为fgets函数不管要求读取的数有多么大,它只读取一行,检测到换行符就结束。当然,要是你需要读取的长度小于第一行长度时,文件的指针会偏移到当前读完的字符之后的位置,下次调用fgets函数时,会继续读取该位置之后的字符串。

    展开全文
  • C语言学习笔记之 关于文件操作函数文件操作是C语言的最后篇章了,一起来看一下用C语言怎么操作文件一:文件指针我们所说的文件不同于一个数据类型,比如一个test.txt文档,它有自己的一些属性,比如文件的当前位置、...
  • C语言getutent()函数:从utmp文件中取得账号登录数据头文件:#include 定义函数:struct utmp *getutent(void);函数说明:getutent()用来从utmp 文件(/var/run/utmp)读取一项登录数据, 该数据以utmp 结构返回. 第...
  • 相关函数:getutent, getutid, getutline, setutent, endutent, pututline, ...函数说明:getutent()用来从utmp 文件(/var/run/utmp)读取一项登录数据, 该数据以utmp 结构返回. 第一次调用时会取得第一位用户...
  • c语言中的fopen()函数

    2021-05-25 06:11:21
    c primer plus 第六版的第十三章的课后练习第二题 (13.11 #2)题目:编写一个文件拷贝程序,该程序通过命令行获取原始文件名和拷贝文件名。尽量使用标准的 I/O 和二进制模式。首先呢,命令行就是利用windows里面(博主...
  • C语言getgrent()函数:从组文件中取得账号的数据头文件:#include #include 定义函数:struct group * getgrent(void);函数说明:getgrent()用来从组文件(/etc/group)读取一项组数据, 该数据以group 结构返回. 第...
  • C语言中文件操作

    2021-05-25 06:34:32
    2、对文件的操作步骤1)、引入头文件(stdio.h)2)、定义文件指针3)、打开文件4)、文件读写5)、关闭文件3、对文件的读写操作函数(头文件stdio.h)1)、字符读写函数:fgetc和fputc2)、字符串读写函数:fgets和fputs3)、...
  • System()是c语言中为了调用windows系统命令来设置的,它包含头文件#include,具体的使用可以system("help");后发现帮助命令,命令如下:有关某个命令的详细信息,请键入 HELP 命令名ASSOC 显示或修改文件扩展...
  • 文件函数声明“stdio.h”头文件。(1)文件打开与关闭打开文件的实质是建立文件的各种有关信息,并使文件指针指向该文件,以便进行其它操作。文件的打开操作通过fopen函数实现。a. fopen函数函数原型:FILE *fopen...
  • C语言文件概念

    2021-05-20 02:33:53
    C语言文件概念引导语;文件的范畴很广泛,电脑上运行的程序、杀毒等等都叫文件。以下是百分网小编分享给大家的C语言文件概念,帮助大家学习C语言基础知识,欢迎阅读!文件的基本概念所谓“文件”是指一组相关数据...
  • c语言头文件及其函数

    2021-05-22 07:23:29
    c语言头文件及其函数头文件 ctype.h函数列表<>函数类别 函数用途 详细说明字符测试 是否字母和数字 isalnum是否字母 isalpha是否控制字符 iscntrl是否数字 isdigit是否可显示字符(除空格外) isgraph是否可显示...
  • C语言文件的操作(一)一.文件定义及分类概念:文件是指一组相关数据的有序集合,这个数据集有一个名称,即为文件名。§1 普通文件:普通文件是驻留磁盘或其他外部介质上的一个有序数据集,可以是源文件、目标...
  • 文件指针三、文件的打开和关闭在C语言中,将不同的输入/输出设备之间进行传递的数据抽象为“流”。当一段程序调用scanf()函数时,会有数据经过键盘流入存储器,当调用printf()函数,会有数据从存储器流向屏幕...
  • //获取指向文件的指针char * pBuf; //定义文件指针fseek(pFile,0,SEEK_END); //将指针移到文件末尾以获取文件长度int len = ftell(pFile); //获取文件长度pBuf =新字符[len +1]; //定义数组长度倒带(pFile); //...
  • C语言总是从main函数开始执行吗

    千次阅读 2021-05-21 05:33:26
    //--------------------------------------------------------本文目录结构|-提出问题|-解决问题|-推荐文章|-作业//-------------------------------------------------------...③main函数结束吗?二、解决问题ma...
  • C语言常用文件读写函数记录
  • C语言函数

    千次阅读 2021-05-22 07:25:03
    C语言函数是一种函数,用来编译C语言,一般包括字符库函数,数学函数,目录函数,进程函数,诊断函数,操作函数等。[1]中文名C语言函数外文名C language function用途编译C语言所在函数库性质函数C语言函数字符...
  • C语言文件详解 引入: 主要文件操作包括以下函数: 打开文件 关闭所有打开的文件并结束程序 从文件指针指向的文件读取一个字符 将指定字符写到文件指针所指向的当前位置上 关闭文件流释放文件指针 fopen...
  • C语言中更新文件

    2021-05-21 14:14:06
    许多文件处理应用,你可能对创建一个新的文件不感兴趣,但是对修改已存在的文件感兴趣。修改文件的过程称为更新文件。这不像想象的那么简单。大多数系统,如果一个文件因为输入而打开着,再要为输出打开它是...
  • 函数 fopen()将一个文件和一个流关联起来,并初始化一个类型为 FILE 的对象,该对象包含了控制该流的所有信息。这些信息包括指向缓冲区的指针;文件位置指示器,它指定了获取文件的位置;以及指示错误和文件结尾情况...
  • C语言字符串常用操作函数C语言字符串、文件操作常用操作函数标准输入/输出重定向文件操作补充 C语言字符串、文件操作常用操作函数 字符串输出 - puts int puts(const char *str) 字符串写入到标准输出 stdout 字符...
  • 文件可分为:文本文件和二进制文件 ...fopen()打开文件,这一函数在stdio.h声明,第一个参数是要开开的文件名,第二个参数是指定文件打开模式的一个字符串. fopen()函数打开模式的字符串 “r” = “rt” ...
  • c语言的文件存取方式只能是顺序存取?c语言的文件存取方式包括顺序存取方式和随机存取(需要使用fseek等函数帮助)方式两种。顺序读取顺序读取也就是从上往下,一笔一笔读取文件的内容。...打开文件函数原型为:_...
  • 进行C语言文件的存取时,都会先进行“打开文件”操作,这个操作就是打开数据流,而“关闭文件”操作就是关闭数据流。1.2 缓冲区(Buffer):指程序执行时,所提供的额外内存,可用来暂时存放做准备执行的数据。它...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 33,001
精华内容 13,200
关键字:

在c语言中关闭文件的函数名称是

c语言 订阅