|
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" 这种文件名,下面的代码可以解决此问题:
|