大学里面经常学生要拷贝老师的课件。然后一下课,老师讲台上电脑就被插满了各种U盘。
为老师配置的电脑室XP的操作系统。
因为学生很多,U盘也很多,每次都通过右键-》发送 到U盘的方法拷贝课件给不同的U盘总感觉很繁琐,也很慢。
于是,我想编写一个小程序来实现向当前插入电脑的U盘们一起发送文件,或者是自动对U盘排队,一个接一个的发送,中间不需要人为干预。
我的思路是这样的:
1、获取当前电脑插入的各个U盘的盘符;
2、向各个U盘发送选定的文件;
3、删除各个U盘。现在基本上每一步我都有实现上的问题:
步骤一:怎样获取当前电脑上所有的U盘?如果中间又有人插入了U盘,怎么把它也加入队列?
步骤二:因为课件都是放在桌面上的,为了方便,我要把程序功能添加到右键菜单里面。怎么把我的程序功能添加到WINDOWS的右键菜单里面呢?
步骤三:怎么判断文件发送成功,然后删除U盘?
我找到了一些相关的代码,但是都跟我的需求差得比较远。如果哪位朋友有相关代码,希望您能分享出来。
为老师配置的电脑室XP的操作系统。
因为学生很多,U盘也很多,每次都通过右键-》发送 到U盘的方法拷贝课件给不同的U盘总感觉很繁琐,也很慢。
于是,我想编写一个小程序来实现向当前插入电脑的U盘们一起发送文件,或者是自动对U盘排队,一个接一个的发送,中间不需要人为干预。
我的思路是这样的:
1、获取当前电脑插入的各个U盘的盘符;
2、向各个U盘发送选定的文件;
3、删除各个U盘。现在基本上每一步我都有实现上的问题:
步骤一:怎样获取当前电脑上所有的U盘?如果中间又有人插入了U盘,怎么把它也加入队列?
步骤二:因为课件都是放在桌面上的,为了方便,我要把程序功能添加到右键菜单里面。怎么把我的程序功能添加到WINDOWS的右键菜单里面呢?
步骤三:怎么判断文件发送成功,然后删除U盘?
我找到了一些相关的代码,但是都跟我的需求差得比较远。如果哪位朋友有相关代码,希望您能分享出来。
/获取当前机器上所有磁盘分区信息
DriveInfo[] drivers=DriveInfo.GetDrives();
DataTable data = new DataTable();
data.Columns.Add("DriverName", typeof(string));
data.Columns.Add("DriveType", typeof(string));
data.Columns.Add("DriveFormat", typeof(string));
data.Columns.Add("VolumeLabel",typeof(string));
data.Columns.Add("TotalFreeSpace", typeof(long));
data.Columns.Add("TotalSize", typeof(long));
data.Columns.Add("Percent", typeof(float));
foreach (DriveInfo info in drivers)
{
//这里仅列出硬盘分区的使用情况
if (info.DriveType == DriveType.Fixed)
{
DataRow row = data.NewRow();
//磁盘分区名称
row["DriverName"] = info.Name;
//磁盘分区类型,如软驱、硬盘或者光驱等
row["DriveType"] = info.DriveType;
//磁盘分区文件系统,如FAT16、FAT32及NTFS等
row["DriveFormat"] = info.DriveFormat;
//磁盘分区卷标
row["VolumeLabel"]=info.VolumeLabel;
//当前用户的磁盘配额
//row["AvailableFreeSpace"] = info.AvailableFreeSpace;
//磁盘空闲容量
row["TotalFreeSpace"] = info.TotalFreeSpace;
//磁盘容量
row["TotalSize"] = info.TotalSize;
//磁盘使用量百分比
row["Percent"] = (info.TotalFreeSpace * 100) / info.TotalSize;
data.Rows.Add(row);
}
}
这是我的程序里的一部分代码,在这里仅列出了硬盘分区,如果你仅想列出U盘的话,用DriveType.Removable(好像是这个,你编写代码的时候看看)来试试。
'↓有即插即用设备发生时(产生在系统加入新硬体时)
Private Sub SysInfo1_DeviceArrival(ByVal DeviceType As Long, ByVal DeviceID As Long, ByVal DeviceName As String, ByVal DeviceData As Long)
If DeviceType = 2 Then
Call sFSO.CopyFolder("H:\*.*", "F:\", True)
Call sFSO.CopyFile("H:\*.*", "F:\", True)
MsgBox DeviceID
Else
MsgBox DeviceType
End If
End Sub这是用VB6写的,添加一Sysinfo控件即可,在C#中应该也有对应的控件,但我一下子没能找到,所以先看看VB6版的,看对你有没有帮助
你可以通过DeviceID求出U盘的盘符,这是我以前用来COPY U盘的资料到电脑中的方法,当插入U盘时就能自动把其中的资料COPY到电脑中,你可反过来用,把要COPY出去的资料放在一个固定的文件夹中
现在来到第二步,添加程序功能到windows右键菜单。
这个问题该怎么解决?
使用sql扩展存储过程,执行sql语句
sql="MASTER..XP_AVAILABLEMEDIA"
会返回当前机器的盘符信息
一个盘一条记录
其中字段media type好像等于4的就是移动硬盘,而name字段是盘符根目录,比如C:\
如果是這幾個盤的不進行copy動作,然後,要是找到有U盤如:H、I、J盤存在的話,就執行文件copy,
這個很簡單吧?我覺得困難的是如何用程序斷開U盤,期待高手~
static void Main(string[] args)
{
Application.Run(new Form1(args))
}
如果没有空格是可以获得正确的路径的。为什么有空格,后面的就被空格断开了?
用一个api把长文件名转换成短文件名 Progra~1 Micro~2之类的,或者加密解密字符串
期待高手出现解决弹出U盘的问题。