100分。c#怎样获取当前电脑上移动存储设备列表,以及文件复制到移动存储设备问题

liudanking 2009-05-14 10:30:19
大学里面经常学生要拷贝老师的课件。然后一下课,老师讲台上电脑就被插满了各种U盘。
为老师配置的电脑室XP的操作系统。
因为学生很多,U盘也很多,每次都通过右键-》发送 到U盘的方法拷贝课件给不同的U盘总感觉很繁琐,也很慢。
于是,我想编写一个小程序来实现向当前插入电脑的U盘们一起发送文件,或者是自动对U盘排队,一个接一个的发送,中间不需要人为干预。
我的思路是这样的:
1、获取当前电脑插入的各个U盘的盘符;
2、向各个U盘发送选定的文件;
3、删除各个U盘。


现在基本上每一步我都有实现上的问题:
步骤一:怎样获取当前电脑上所有的U盘?如果中间又有人插入了U盘,怎么把它也加入队列?
步骤二:因为课件都是放在桌面上的,为了方便,我要把程序功能添加到右键菜单里面。怎么把我的程序功能添加到WINDOWS的右键菜单里面呢?
步骤三:怎么判断文件发送成功,然后删除U盘?

我找到了一些相关的代码,但是都跟我的需求差得比较远。如果哪位朋友有相关代码,希望您能分享出来。
我的邮箱是liudanking@gmail.com
...全文
503 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
aaa_zzz_000 2009-05-16
  • 打赏
  • 举报
回复
ding...
yanlongwuhui 2009-05-14
  • 打赏
  • 举报
回复
关注
liudanking 2009-05-14
  • 打赏
  • 举报
回复
步骤二:因为课件都是放在桌面上的,为了方便,我要把程序功能添加到右键菜单里面。怎么把我的程序功能添加到WINDOWS的右键菜单里面呢?
这个问题该怎么解决?
南哥1207 2009-05-14
  • 打赏
  • 举报
回复
定定,关注,很好的想法,等高手解决~
消失的尘芥 2009-05-14
  • 打赏
  • 举报
回复
关注
liudanking 2009-05-14
  • 打赏
  • 举报
回复
我在获取info.DriveFormat的时候出现,设备未就绪,请问是什么原因呢?
liudanking 2009-05-14
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zhoufoxcn 的回复:]
C# code
/获取当前机器上所有磁盘分区信息
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));

[/Quote]
恩 ,谢谢你的代码。第一个步骤已经得到解决了。
现在来到第二步,添加程序功能到windows右键菜单。
DengXingJie 2009-05-14
  • 打赏
  • 举报
回复

'↓有即插即用设备发生时(产生在系统加入新硬体时)
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出去的资料放在一个固定的文件夹中
zhushoudong 2009-05-14
  • 打赏
  • 举报
回复
ding
gyouyang 2009-05-14
  • 打赏
  • 举报
回复
板凳
ericllzh 2009-05-14
  • 打赏
  • 举报
回复
用遍历机器的盘符。如上所写。
周公 2009-05-14
  • 打赏
  • 举报
回复

/获取当前机器上所有磁盘分区信息
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(好像是这个,你编写代码的时候看看)来试试。
zhaoweiting0609 2009-05-14
  • 打赏
  • 举报
回复
没写过,但是看你的思路很清晰,可以一步一步的实现,有什么问题再慢慢的解决
Dhoopu 2009-05-14
  • 打赏
  • 举报
回复
only_lonely 2009-05-14
  • 打赏
  • 举报
回复
额····帮顶···
forever_yuan 2009-05-14
  • 打赏
  • 举报
回复
UP
期待高手出现解决弹出U盘的问题。
liudanking 2009-05-14
  • 打赏
  • 举报
回复
最后一步了,请大家帮帮忙!
liudanking 2009-05-14
  • 打赏
  • 举报
回复
[Quote=引用 29 楼 wartim 的回复:]
api

Function Long GetShortPathNameA(String lf, ref String sf, Long buflen) Library “kernel32.dll”
[/Quote]
谢谢这位朋友。
第二个步骤也已经解决。
最后一个步骤了:删除U盘。
这个目前任然不知道怎么实现……
wartim 2009-05-14
  • 打赏
  • 举报
回复
api

Function Long GetShortPathNameA(String lf, ref String sf, Long buflen) Library “kernel32.dll”
wartim 2009-05-14
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 liudanking 的回复:]
引用 25 楼 liudanking 的回复:
步骤二也基本解决,但是传值过来如果有空格的话就会自动把空格后面的省略,这是为什么?

获取参数方法是这样的:
static void Main(string[] args)
{
Application.Run(new Form1(args))
}
如果没有空格是可以获得正确的路径的。为什么有空格,后面的就被空格断开了?

[/Quote]

用一个api把长文件名转换成短文件名 Progra~1 Micro~2之类的,或者加密解密字符串
加载更多回复(10)

111,125

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧