最近学习了关于文件操作的一些函数,顺手整理一下:
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; }结果:
