博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
54.文件按大小切割
阅读量:5054 次
发布时间:2019-06-12

本文共 2475 字,大约阅读时间需要 8 分钟。

运行结果:

完整代码:

1 #define _CRT_SECURE_NO_WARNINGS  2 #include 
3 #include
4 5 #define sorPath "111.doc" 6 char **stoPath; 7 8 //获取文件大小 9 int getSize(char *path) 10 { 11 FILE *pf = fopen(path, "r"); 12 13 if (pf) 14 { 15 fseek(pf, 0, SEEK_END); 16 int length = ftell(pf); 17 fclose(pf); 18 return length; 19 } 20 21 return 0; 22 } 23 24 //切割文件 25 void devide(char *path,int n) 26 { 27 //分配n个地址 28 stoPath = (char **)malloc(sizeof(char *) * n); 29 //每个地址分配内存,并且初始化 30 for (int i = 0; i < n; i++) 31 { 32 stoPath[i] = (char *)malloc(1024); 33 sprintf(stoPath[i], "%d.doc", i); 34 printf("%s\n", stoPath[i]); 35 } 36 37 //二进制打开源文件 38 FILE *pfr = fopen(path, "rb"); 39 //获取大小 40 int totalSize = getSize(path); 41 42 //如果能被整除 43 if (totalSize%n == 0) 44 { 45 for (int i = 0; i < n; i++) 46 { 47 FILE *pfw = fopen(stoPath[i], "wb"); 48 for (int j = 0; j < totalSize / n; j++) 49 { 50 fputc(fgetc(pfr), pfw); 51 } 52 fclose(pfw); 53 } 54 } 55 else 56 { 57 //如果不能被整除 58 for (int i = 0; i < n - 1; i++) 59 { 60 61 FILE *pfw = fopen(stoPath[i], "wb"); 62 for (int j = 0; j < totalSize / n; j++) 63 { 64 fputc(fgetc(pfr), pfw); 65 } 66 fclose(pfw); 67 } 68 69 FILE *pfw = fopen(stoPath[n-1], "wb"); 70 int left = totalSize - (totalSize / n) * (n - 1); 71 for (int i = 0; i < left; i++) 72 { 73 fputc(fgetc(pfr), pfw); 74 } 75 fclose(pfw); 76 } 77 fclose(pfr); 78 } 79 80 //合并 81 void merge(char *path, int n) 82 { 83 FILE *pfw = fopen(path, "wb"); 84 85 for (int i = 0; i < n; i++) 86 { 87 FILE *pf = fopen(stoPath[i], "rb"); 88 if (pf) 89 { 90 int ch; 91 while ((ch = fgetc(pf)) != EOF) 92 { 93 fputc(ch, pfw); 94 } 95 } 96 fclose(pf); 97 } 98 fclose(pfw); 99 }100 101 void main()102 {103 int length = getSize(sorPath);104 105 printf("%d\n", length);106 devide(sorPath, 10);107 merge("last.doc", 10);108 system("pause");109 }

 

转载于:https://www.cnblogs.com/xiaochi/p/8426853.html

你可能感兴趣的文章
配置链路聚合中极小错误——失之毫厘谬以千里
查看>>
代码整洁
查看>>
蓝桥杯-分小组-java
查看>>
Java基础--面向对象编程1(类与对象)
查看>>
Android Toast
查看>>
iOS开发UI篇—Quartz2D使用(绘制基本图形)
查看>>
docker固定IP地址重启不变
查看>>
桌面图标修复||桌面图标不正常
查看>>
JavaScript基础(四)关于对象及JSON
查看>>
关于js sort排序方法
查看>>
JAVA面试常见问题之Redis篇
查看>>
javascript:二叉搜索树 实现
查看>>
网络爬虫Heritrix源码分析(一) 包介绍
查看>>
__int128的实现
查看>>
R 读取clipboard内容 (MAC)
查看>>
Problem - 1118B - Codeforces(Tanya and Candies)
查看>>
jdk1.8 api 下载
查看>>
svn 图标不显示
查看>>
getElement的几中属性介绍
查看>>
iOS 使用Quartz 2D画虚线 【转】
查看>>