我正在为自己制作一个简单的文件夹同步备份工具,并使用File.Copy遇到了相当大的障碍.进行测试将大约44,000个小文件(Windows邮件文件夹)的文件夹复制到我系统中的另一个驱动器时,我发现使用File.Copy比使用命令行并运行xcopy来复制相同的文件/文件夹慢3倍.我的C#版本需要超过16分钟来复制文件,而xcopy只需要5分钟.我试图在这个主题上寻求帮助,但我发现所有人都在抱怨通过网络缓慢复制大文件的文件.这既不是大文件问题也不是网络复制问题.
我发现了一篇关于更好的File.Copy替换的有趣文章,但是发布的代码有一些错误会导致堆栈出现问题,而且我无法通过足够的知识来解决代码中的问题.
是否有任何常见或简单的方法可以更快速地替换File.Copy?
如何从Windows中的HID设备获取原始描述符数据?
背景:
我需要从Windows中的HID设备获取制造商,产品名称和序列号.我正在使用hid.dll使用此处显示的功能访问设备.我的问题与此非常相似.我可以从SOME HID设备获取制造商字符串和产品字符串,但大多数都无法返回此数据,HidD_GetManufacturerString返回false.但是,我知道这些设备在描述符中确实有字符串信息,因为我可以使用USBTreeView查看它.
有趣的是,即使对于返回制造商和产品名称的设备,我通过hid.dll获得的值与我使用上述工具获得的值非常不同,后者从USB设备获取原始数据.
例如,一个Xbox 360控制器:
Via USB Tree View:
Device Description : Xbox 360 Controller for Windows
Language 0x0409 : "©Microsoft Corporation"
iProduct : 0x02
Language 0x0409 : "Controller"
iSerialNumber : 0x03
Language 0x0409 : "0843806"
Via hid.dll using HidD_GetManufacturerString, HidD_GetProductString, and HidD_GetSerialNumberString:
Description : HID-compliant game controller
Product : Controller (XBOX 360 Controller for Windows)
Manufacturer : FAILS
Serial Number : FAILS
Run Code Online (Sandbox Code Playgroud)
WinUSB无法打开这些设备来检索此数据,因为它们不使用winusb.sys驱动程序.
1)我不明白为什么HidD函数返回的值与USB描述符中的值不匹配.2)我找不到任何方法来访问HID设备的原始USB描述符数据,因为我无法使用WinUSB访问它们.
编辑1:
好的,所以我对HID有了更多的了解.我通过hid.dll获取的数据似乎是驱动程序指定的数据,而不是来自USB设备的数据.HID也可以应用于USB以外的传输设备.所以没关系.最后,我真正想知道的是,当我拥有HID设备时,如何获得USB设备以及我将使用哪种API.除了WinUSB不起作用,我唯一能找到的是内核级函数IOCTL.我不知道这是否适合普通的非管理员应用程序.