fopen函数
FILE *fopFILE *fopen(const char *path, const char *mode);
fopen打开由path指定的文件,并把它与一个文件流关联起来。mode参数指定文件的打开方式。执行成功返回一个非空的FILE*指针,失败时返回NULL.
其中mode参数的取值有:
r,rb:只读方式打开;
w,wb:以只写方式打开,并把文件长度截短为0;
a,ab:以写方式打开,新内容追加在文件尾;
r+,rb+,r+b:以更新方式打开(读写);
w+,wb+,w+b:以更新方式打开,并把文件长度截短为0;
a+,ab+,a+b:以更新方式打开,新内容追加在文件尾。
字母b表示文件是一个二进制文件而不是文本文件。
int main()
{
FILE *fp = fopen("abc", "ab+");
if (fp == NULL)
{
perror ("fopen");
return -1;
}
printf ("打开文件成功\n");
return 0;
}
fread函数
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
数据从文件流stream读到ptr指向的数据缓冲区里。size参数指定每个数据记录的长度,nmemb给出要传输的记录的个数。函数的返回值是成功读到数据缓冲区里的记录的个数(不是字节数)。
int main()
{
FILE *fp = fopen("BTree.c", "ab+");
if (fp == NULL)
{
perror ("fopen");
return -1;
}
char buf[SIZE] = {0};
// feof 判断是否读到文件结尾,如果读到文件结尾,它返回一个非0 的值
int ret;
while (ret = fread(buf, sizeof(char), SIZE-1, fp))
{
buf[ret*sizeof(char)] = '\0';
printf ("%s\n", buf);
}
if(ret == 0 && !feof(fp))
{
perror ("fread");
return -1;
}
printf ("文件读取结束\n");
return 0;
}
fwrite()函数:
从指定的数据缓冲区里取出数据记录,并把它们写到输出流中。它的返回值是成功写入的记录个数。
size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);
//文件复制
int main()
{
FILE *fp = fopen("1.ppt", "ab+");
if (fp == NULL)
{
perror ("fopen");
return -1;
}
FILE *fp1 = fopen("2.ppt", "ab+");
if (fp1 == NULL)
{
perror ("fopen");
return -1;
}
char buf[SIZE] = {0};
int ret;
while (ret = fread(buf, sizeof(char), SIZE, fp))
{
fwrite(buf, sizeof(char), ret, fp1);
}
if(ret == 0 && !feof(fp))
{
perror ("fread");
return -1;
}
printf ("文件读取结束\n");
fclose(fp);
fclose(fp1);
return 0;
}
fclose()函数用于关闭指定的文件流。
int fclose(FILE *fp);
flush()用于把文件流里所有未写出的数据立即写出。
使用这个函数可以确保在程序继续执行之前重要的数据都已经被写到磁盘上。
调用fclose函数隐含执行了一次fflush操作,所以不必在调用fclose之前调用fflush。
fgetc()从文件流里取出下一个字节并把它作为一个字符返回。当它到达文件结尾或出现错误时,返回EOF。getc()和fgetc()一样,但它有可能被实现为一个宏。getchar()相当于getc(stdin)。
//文件的复制
#include <stdio.h>
#define SIZE 1024
int main()
{
FILE *fp = fopen("1.ppt", "ab+");
if (fp == NULL)
{
perror ("fopen");
return -1;
}
FILE *fp1 = fopen("2.ppt", "ab+");
if (fp1 == NULL)
{
perror ("fopen");
return -1;
}
char buf[SIZE] = {0};
int ret;
while (1)
{
int c = fgetc(fp);
if (c == EOF)
break;
fputc(c, fp1);
}
fclose(fp);
fclose(fp1);
return 0;
}