文件的读写 二进制形式打开文件
路径
路径里面
C:\Users\51462\Desktop\实习作业\实习相关材料
如果直接复制到字符串 放荡程序中 会报错 因为 \ 会被编译器识别位转义符
所以这里路径放到字符串我们要再加一个转义符
"C:\\Users\\51462\\Desktop\\实习作业\\实习相关材料"
而且路径是不区分大小写的
绝对路径 相对路径 在大一新手村 老师都讲烂了,懒得写了
文件
这玩意 在大一新手村 也是都会讲,但是一般都是最后几个章节,期末不太好出题,也就是学个皮毛,今天来好好看看。
FILE
结构体
这些底层的东西我们不需要关心
要关心的是 FILE* pf = 0;
我们在 使用文件的时候 都会先定义一个结构体指针
fopen_s(&pf, "save", "rb")
第一个参数 &fp
这是一个FILE** 类型的数据,也就是一个文件指针的地址,在文件被成功打开后,这个函数就会通过二级指针去修改一级指针 也就是pf的值,让pf指向我们打开的文件。
这个函数会有返回值,成功打开文件返回0,且pf指向文件,可以用if(pf == 0)来来判断文件是否打开,或者创建一个 值来接受文件返回值 。
fwrite(&a, 1, 1, pf);
第一个参数 : 要写入数据的地址
第二个参数 : 块的大小(字节)
第三个参数 : 块的数量
第四个:操作文件的指针
这里要注意 第二个第三个 对于单个变量 都无所谓 只要是两个的乘积 来写入就行,有时候也可以这样用
- 当
size=4
、count=1
(比如写入一个int
):fwrite
会从内存中读取连续的 4 字节(对应int
的大小),然后写入文件。 - 当
size=1
、count=4
:fwrite
会从内存中读取4 个连续的 1 字节块(总长度也是 4 字节),然后写入文件。 - 注意这里两种写法 都不影响字节序,不会让数据出现问题。但是size = 1 可以一个字节一个字节的操作 更有操作空间,把所有东西(组合不同的数据类型)都弄好,然后一次性写入。
fseek(pf,0,SEEK_END);
第二个参数 偏移量:
第三个参数 基准位置:
ftell
fseek 最后一个参数 使用 SEEK_END
配合 ftell 就能直到文件的大小。
rewind
这两个 代码 是等价的。
fread(fd, 1, fsize, pf);
第一个数据 文件数据放入的缓冲区
第二个参数 单个数据块大小
第三给参数 数据块数量
文件指针
这个 缓冲区如何去做呢?
我们之前用
fseek(pf,0,SEEK_END);int size = ftell(pf)
的方式能够拿到文件大小,用这个size 开个堆就可以 当作fread 第一参数的缓冲区
值得注意的是 这个缓冲区类型 我们是用void*(通用指针类型) 来操作
void* fd = malloc(size);
然后我们继续把 缓冲区 fd 写入另外一个文件中就可以,fopen 在写文件如果没有文件就会自动帮我们创建。
当然 在缓冲区赋值完成后第一文件就不用了 我们要第一时间关闭
fclose(pf);
pf = 0;
fopen(&fd,"C://Users//Administrator//Desktop//777","wb");
fwite(fd,1,size,fp);
然后关闭 指针指向空就行了
fclose(pf);
pf = 0;
记得我们的fd 是malloc 出来的记得释放掉
free(fd);
fd = 0;