C里面打开文件API fopen 参数详解
fopen (参数1: 文件路径, 参数2: 模式(读r, 写w,rb作为二进制读,wb作为二进制文件写))
读取文件数据
int main () {
// 文件路径
char *fileNameStr = "D:\Temp\DerrFile.txt";
// 打开一个API
FILE *file = fopen(fileNameStr, "r");
// 判断文件是否被打开 因为读一个文件可能这个文件不存在
if (!file) {
printf("文件打开失败,路径%s的文件有问题", fileNameStr);
exit(0); // 退出程序
}
// 读取文件内容
// 先定义缓存区域(容器)
char buffer[10];
// 文件读取API fgets(buffer, 10, file) 第一个参数,缓冲区, 第二个参数:读取的长度: 第三个参数: 文件的指针
while (fgets(buffer, 10, file))
printf("%s", buffer);
}
// 使用完记得关闭文件
// 关闭文件 JAVA关闭流
// todo 最好是fopen之后就写fclose然后在中间写代码
fclose(file);
}
写入数据文件
char *fileNameStr = "D:\\Temp\\DerrFileW.txt";
// 如果模式是w 会自动生成文件 0kb
FILE *file = fopen(fileNameStr, "w");
if (!file) {
printf("文件打开失败,路径%s的文件有问题", fileNameStr);
exit(0); // 退出程序
}
fputs("Derry Success run...", file);
// 关闭文件 JAVA关闭流
fclose(file);
文件的复制
// 源文件
char *fileNameStr = "D:\\Temp\\DerrFileW.txt";
// 复制的目标
char *fileNameStrCopy = "D:\\Temp\\DerrFileW2.txt";
// 复制文件需要用到二进制读 rb
FILE *file1 = fopen(fileNameStr, "rb");
// 需要向fileNameStrCopy写入数据所以为wb
FILE *fileCopy = fopen(fileNameStrCopy, "wb");
// 逻辑处理
if (!file1 || !fileCopy) {
printf("文件打开失败,路径%s的文件有问题", fileNameStr);
exit(0); // 退出程序
}
// 定义一个Buff
int buffer[512]; // 512*4 = 2048字节
int len; // 每次读取的长度
// fread: (参数1: 容器buff; 参数2:每次偏移多少 ;参数3: 容器大小)
// sizeof(buffer) / sizeof (int)=== 512
while ((len = fread(buffer, sizeof(int), sizeof(buffer) / sizeof(int), file1)) != 0) {
fwrite(buffer, sizeof(int), len, fileCopy);
}
文件大小的获取
char *fileNameStr = "D:\\Temp\\DerrFileW.txt";
FILE *file = fopen(fileNameStr, "rb");
// 没有专门的获取文件大小的API
// 方法 读取头指针 头指针挪动位置 挪动到最后,就可以求得文件大小`
fseek(file, 0, SEEK_END); // file 就有了更丰富的值,给你的 file指针赋值,挪动的记录信息
// 读取 刚刚给file赋值的记录信息
long file_size = ftell(file);
printf("%s文件的字节大小是:%ld\n", fileNameStr, file_size);
fclose(file);