最近学习了关于文件操作的一些函数,顺手整理一下:
1(打开 fopen 函数:它的作用就是打开一个你需要的文件,括号里面的一个参数,表示要打开的文件,第二个参数表示以什么形式打开,
FILE * fopen ( const char * filename, const char * mode )
举个例子:
FILE * pFile;
pFile = fopen ("myfile.txt","w")
就是指打开myfile这个文件,用写的形式打开。(假如文件夹里面没有这个文件,用'w'的形式打开,可以在文件夹下创建一个myfile文件。
2(写入)fputs 一个可以往任何 文件中输出信息的接口
它的作用就是通往特定的指针,打印其内容:
int fputs ( const char * str, FILE * stream );
第一个参数是你写的字符串是什么,第二个参数就是你想往哪里写 ;
举个例子
int main()
{
FILE *fp = fopen("log.txt", "w");
if (fp == NULL);
{
/* perror("fopen");*/
return 1;
}
fputs("abcd 1234", fp);
fclose(fp);
return 0;
system("pause");
return 0;
}
注意”w''是清空式写入,就是说这一次的写入前会将之前的信息清空。
3文件读取函数 主要分为文本读取,和二进制读取;
1 文本读取:
1 fputc
int fputc ( int character, FILE * stream );
与上面的fputs一样,第一个参数是你想写入的内容,第二个参数是你想往那里写入;
不过它的操作针对单个字符,输出这样的结果
2 fgetc 就是从文件里获得字符
它的返回值就是返回你要读取的字符,碰到EOF就表示已经读取到文件尾;
3 fprintf()
int fprintf ( FILE * stream, const char * format, ... );
fprintf() 其实与printf()类似,也是输出,不过它是格式化输出,它的第一个参数是 你要把哪些输出的内容写到哪个文件上,第个参数就是输出的形式。
举个例子:
4 f scanf()
int fscanf ( FILE * stream, const char * format, ... );
是指从特定的文件格式化输入;第一个参数就是表示你数据源来自键盘还是文件;
二进制读取函数:
1fread 表示二进制读取(内容修改);
size_fread ( void * ptr, size_t size, size_t count, FILE * stream )
第四个参数代表本次读取想要从那里读,参数三代表读取的总字节大小,参数二表示一次读取的字节大小,参数一(指向一段缓冲区)代表你要读取的内容存放在哪里。它的返回值如果大于0 就表示读取成功。
2 fwrite 表示二进制写入(内容修改)
fwrite ( const void * ptr, size_t size, size_t count, FILE * stream );
第一个参数代表你要写入的文件的起始地址,第二个参数代表一次写入的字节的大小,第三个参数表示要写入的总字节的大小,第四个参数表示你要往哪里写;它的返回值大于0 表示读取成功。
3 fseek(属性修改)
int fseek ( FILE * stream, long int offset, int origin )
它的作用是:根据文件指针的位置和偏移量来定位文件指针(可以更改文件对应的读写位置)
第一个参数表是你要改的文件指针,第二个文件读取时的偏移量,这个偏移量相对于第三个参数而言。
第三个参数的取值有:
分别文件的当前位置,目前指针所指向的文件位置,文件的节尾。
4 ftell 属性修改)
它的作用是 可以根据文件指针的位置和偏移量来定位文件指针。
就是说我们将文件里的内容看作一行,利用文件指针可以看到具体偏移量。
5 rewind
作用就是让文件指针的位置回到起始位置。
接下来举个列子将以上函数都使用一下,加深理解;
#include<stdio.h>
#include<windows.h>
#pragma warning (disable:4996)
int main()
{//1open
FILE *src = fopen("lena.png", "rb");
if (src == NULL)
{
perror("fopen");
return 1;
}
FILE *dst= fopen("lena_copy.png", "wb");
if (dst== NULL)
{
perror("fopen");
return 2;
}
//2 copy
/*char buf[1024];
int n = 0;
while ((n = fread(buf, 1, 1024, src)) > 0)
{
fwrite(buf, 1, n, dst);
}
if (feof(src)){
printf("read src fileend!\n ");
}*/
fseek(src, 0, SEEK_END);
int size = ftell(src);
rewind(src);
char*file_content = (char*)malloc(size);
if (file_content == NULL)
{
perror("malloc");
return 3;
}
fread(file_content, size, 1, src);
fwrite(file_content, 1, size, dst);
//3 close
fclose(src);
fclose(dst);
free(file_content);
system("pause");
return 0;
}
结果: