当前位置:网站首页>文件操作的实例——下载并合并流式视频文件
文件操作的实例——下载并合并流式视频文件
2022-08-09 14:53:00 【黄铎彦】
目录
前言
c语言的文件操作内容比较繁琐,如果只看代码不上机的话就没办法有效掌握。最近我在线观看学习视频,我就突发灵感,想到可以通过下载流式媒体文件并进行合并来熟悉文件操作。
一、操作环境
win11家庭中文版和vs2022
二、操作步骤
1.登录学习页面

2.按F12,打开开发人员工具窗口

3.按下ctrl+R,记录页面活动,然后点击Fetch/XHR
4.在下面的列表中,找到扩展名为m3u8的文件,右击->copy->copy link address
5.粘贴到记事本里面观察
可以发现它的完整路径是https://r1-ndr.ykt.cbern.com.cn/edu_product/78/video/76b578c33eca409e850c294a4b25273e/3a3d0d00cf4057722d63668579b3f696.1280.720.false/3a3d0d00cf4057722d63668579b3f696.1280.720.m3u8记住这个文件所在的网页文件夹,后面要用到。
6.在第4步的列表中对那个m3u8再右击,选open in new tab,把那个文件下载下来,之后用记事本打开观察

可以看到里面列举了很多ts文件,而且文件名长度都是50个字符。
7.在vs中建立空项目copy,将这个m3u8文件复制到与项目文件copy.vcxproj同一文件夹下,比如 D:\实验室\copy\copy ,注意有两个copy
8.按图示添加源文件
9.编写程序代码
a)下载.c
#include<stdio.h>
#include<string.h>
#include<stdlib.h>//此程序必须在win10/11上运行,否则需要安装curl!
#pragma warning(disable:4996)
extern void download()//下载所有的ts文件
{
FILE* fp = fopen("3a3d0d00cf4057722d63668579b3f696.1280.720.m3u8", "r");
char name[51];//待下载的文件名
char cmd[500];//待调用的命令行
while (fscanf(fp, "%s", name) != EOF)
if (strlen(name) == 50)//文件名长度刚好都一样
{
sprintf(cmd, "curl https://r1-ndr.ykt.cbern.com.cn/edu_product/78/video/76b578c33eca409e850c294a4b25273e/3a3d0d00cf4057722d63668579b3f696.1280.720.false/%s -o .\\%s", name, name);//组装调用curl下载文件的命令
system(cmd);//执行命令
}
fclose(fp);
}b)合并.c
#include<stdio.h>
#include<string.h>
#pragma warning(disable:4996)
extern void merge()//合并ts文件
{
FILE* fpM = fopen("merge.ts", "wb+");
FILE* fp = fopen("3a3d0d00cf4057722d63668579b3f696.1280.720.m3u8", "r");
FILE* temp = NULL;
char name[51];
while (fscanf(fp, "%s", name) != EOF)
if (strlen(name) == 50)//文件名长度刚好都一样
{
temp = fopen(name, "rb");
char ch = fgetc(temp);
while (!feof(temp))
{
fputc(ch, fpM);
ch = fgetc(temp);//最后一次执行此行,文件读不出,ch仍然是上一次的值,之后feof(temp)成立
}
}
fclose(fpM);
fclose(fp);
fclose(temp);
}10.执行程序
在 入口.c 中编写如下代码:
main()
{
download();
merge();
}然后按工具栏上的“本地windows调试器”按钮执行。
耐心等待一会儿,然后到 D:\实验室\copy\copy 下提取merge.ts即可。
说明
1.今天并不研究使用纯粹的c语言下载文件,所以下载文件的时候调用了系统自带的curl命令。
2.不难看出其中用到的文本文件读写和二进制文件读写的过程。
边栏推荐
- 一些需要思考的物理问题
- Stock trading stylized how to understand their own trading system?
- C语言——void指针、NULL指针、指向指针的指针、常量和指针
- Mysql两个引擎对比
- How can I know if quantitative programmatic trading is effective?
- 【Qt5 + OpenGL】glPointSize(10); error: undefined reference to `__imp_glPointSize‘
- 【OpenGL】三、OpenGL总结:OpenGL坐标系
- JS——循环结构经典例题解析与分享
- What are the hot topics in quantitative programmatic trading?
- 如何让你的量化交易系统具有概率优势,具有正向收益预期呢?
猜你喜欢

MySQL principle and optimization: Limit the query optimization

Shell functions and arrays

navicat for Oraclel链接oracle 报错oracle library is not loaded的解决办法

EasyExcel的应用

focal loss原理及简单代码实现

Mathematica 数据分析(简明)

What is the difference between the four common resistors?

走得通,看得见!你的交通“好帮手”

ImageWatch无法显示图像

【OpenGL】四、OpenGL入门总结:LearnOpenGL CN教程中关于欧拉角公式推导
随机推荐
navicat for Oraclel链接oracle 报错oracle library is not loaded的解决办法
What do professional quantitative traders think about quantitative trading?
DBCO-PEG-DSPE,磷脂-聚乙二醇-二苯并环辛炔,在无铜离子的催化下反应
大咖说·对话生态|当Confluent遇见云:实时流动的数据更有价值
MySQL数据库被攻击,被删库勒索,逼迫我使出洪荒之力进行恢复数据
原子的核型结构及氢原子的波尔理论
[Mysql]--Transaction, transaction isolation level, dirty read, non-repeatable read, phantom read analysis
Similar image detection method
How to List < Map> grouping numerical merge sort
My MySQL database was attacked and deleted for ransom, forcing me to use all my might to recover data
相干光(光学)
Matlab修改Consolas字体
贝塞尔函数
方法学习笔记
【Qt5 + OpenGL】glPointSize(10); error: undefined reference to `__imp_glPointSize‘
怎么才可以知道量化程序化交易是否有效?
如何灵活运用量化交易接口的优势取长补短?
双摄像头系列原理深度剖析【转载】
量子力学初步
How do quantitative investors obtain real-time market data?
