|
10鱼币
学习 C primer Plus 并下载了学习视频,讨厌的是,这些视频是腾讯视频,我想将它们转换为通用的 mp4 格式。网上说,最好的办法是将在播放时它们的缓冲暂存文件连接起来,于是,我结合小甲鱼老师的讲课视频中提到的将两个文件合并的程序了。可是,我改了几天都没改成功,请帮帮我,谢谢! 下面是将两个文件合并的正确的程序,不过是在文件根目录下的,我想要能修改路径及文件名的合成器 ( 缓冲暂存的碎片文件在压缩包里,共有138个,但是论坛最大只给上传1M,故只放了几个 )。
- #include<stdio.h>
- #include<stdlib.h>
- void main()
- {
- FILE *f_pic,*f_file,*f_finish;
- char ch,pic_name[20],file_name[20],finish_name[20];
-
- printf("请输入需要合成的两个文件的名称:\n");
- printf("第一个文件名:");
- scanf("%s",pic_name);
- printf("第二个文件名:");
- scanf("%s",file_name);
- printf("合成的文件名称:");
- scanf("%s",finish_name);
-
- if( !(f_pic = fopen(pic_name,"rb")))
- {
- printf("Cannt open the picture %s !",pic_name);
- return;
- }
- if( !(f_file = fopen(file_name,"rb")))
- {
- printf("Cannt open the file %s !",file_name);
- return;
- }
- if( !(f_finish = fopen(finish_name,"wb")))
- {
- printf("Cannt open the file %s !",finish_name);
- return;
- }
-
- while( !(feof(f_pic)))
- {
- ch = fgetc(f_pic);
- fputc(ch,f_finish);
- }
- fclose(f_pic);
- while( !(feof(f_file)))
- {
- ch = fgetc(f_file);
- fputc(ch,f_finish);
- }
- fclose(f_file);
- fclose(f_finish);
- printf("两文件已成功合成! \n");
- printf("\n");
- system("pause");
- }
复制代码
本帖最后由 jackz007 于 2020-9-28 00:46 编辑
不需要任何修改,这是一个 “傻瓜” 程序,你只需要把编译好的 exe 文件和需要合并的 ts 文件放在同一个目录下,直接运行,如果有合并,那就会有输出文件 "output.ts"。
前面的代码只能针对形如 "1.ts" 这样的文件名,而不能兼容像 "001.ts" 这种文件名,下面的代码可以解决此问题:
- #include <stdio.h>
- #include <string.h>
- main(void)
- {
- FILE * fp1 , * fp2 ;
- char fn[256] , ss[256] , sm[256] , c ;
- int b , e , f , k ;
- for(f = 0 , k = 0 ; k < 1000 ; k ++) {
- strcpy(ss , "%d") ;
- sprintf(sm , "%s.ts" , ss) ;
- sprintf(fn , sm , k) ;
- if ((fp1 = fopen(fn , "rb")) != NULL) {
- f ++ ;
- } else {
- strcpy(ss , "%03d") ;
- sprintf(sm , "%s.ts" , ss) ;
- sprintf(fn , sm , k) ;
- if ((fp1 = fopen(fn , "rb")) != NULL) {
- f ++ ;
- }
- }
- if (f) {
- fclose(fp1) ;
- break ;
- }
- }
- if (! f) {
- fprintf(stderr , "在【0.ts ~ 999.ts】范围内没有搜索到目标!\n") ;
- fprintf(stderr , "在【000.ts ~ 999.ts】范围内没有搜索到目标!\n") ;
- } else {
- if((fp2 = fopen("output.ts" , "wb")) == NULL) {
- fprintf(stderr , "无法创建输出文件 【output.ts】\n") ;
- } else {
- printf("\n") ;
- for(b = k , e = 0 ;; k ++) {
- sprintf(fn , sm , k) ;
- if ((fp1 = fopen(fn , "rb")) != NULL) {
- printf("%s\n" , fn) ;
- c = fgetc(fp1) ;
- while (! feof(fp1)) {
- fputc(c , fp2) ;
- c = fgetc(fp1) ;
- }
- fclose(fp1) ;
- e ++ ;
- } else {
- fclose(fp2) ;
- sprintf(sm , "完成文件 【%s.ts~%s.ts】的拼接\n" , ss , ss) ;
- printf("\n") ;
- printf(sm , b , k - 1) ;
- break ;
- }
- }
- }
- }
- printf("\n") ;
- printf("按下回车键 . . .") ;
- getchar() ;
- }
复制代码
|
-
最佳答案
查看完整内容
不需要任何修改,这是一个 “傻瓜” 程序,你只需要把编译好的 exe 文件和需要合并的 ts 文件放在同一个目录下,直接运行,如果有合并,那就会有输出文件 "output.ts"。
前面的代码只能针对形如 "1.ts" 这样的文件名,而不能兼容像 "001.ts" 这种文件名,下面的代码可以解决此问题:
|