1. 程序自动监测USB设备是否插入和相应的盘符
2. 读取设备上的文件和保存文件到设备上.就是这两个需求,但没找到比较好的lib.(开发环境: 2003)

解决方案 »

  1.   

    1
    http://www.codeproject.com/w2k/usbdisks.asp
    2
    fileinfo类
      

  2.   

    看看这个可以不?
    http://www.codeproject.com/useritems/usbeject.asp
      

  3.   

    谢谢楼上兄弟,现在遇到一个问题:
    如果插入普通的USB,能够得到U盘的盘符,但如果插入MP3,则得不到.
    下面是关键代码:
    private string GetUSBVol()
    {
    string ret = string.Empty; 
    try
    {
    // browse all USB WMI physical disks  
    ManagementObjectSearcher searcher = new 
    ManagementObjectSearcher("select * from Win32_DiskDrive where InterfaceType='USB'"); foreach(ManagementObject drive in searcher.Get())
    {
    // associate physical disks with partitions
    foreach(ManagementObject partition in new ManagementObjectSearcher(
    "ASSOCIATORS OF {Win32_DiskDrive.DeviceID='" + drive["DeviceID"]
    + "'} WHERE AssocClass = Win32_DiskDriveToDiskPartition").Get())
    {
    // associate partitions with logical disks (drive letter volumes)
    foreach(ManagementObject disk in new ManagementObjectSearcher(
    "ASSOCIATORS OF {Win32_DiskPartition.DeviceID='"
    + partition["DeviceID"]
    + "'} WHERE AssocClass = Win32_LogicalDiskToPartition").Get()) 
    {
    string vol = disk["Name"].ToString();
    DialogResult r = MessageBox.Show(this,"Are you sure " + vol.ToUpper() + " is volumn of USB device?", Global.CON_TITLE_QUESTION,
    MessageBoxButtons.YesNo, MessageBoxIcon.Question);
    if(r == DialogResult.Yes)
    {
    ret = vol;
    return ret;
    }
    }
    }
    }
    }
    catch(Exception ex)
    {
    LoggerService.logger.Error("Getting volumn of USB device fail!", ex); 
    }
    return ret;
    }
      

  4.   

    http://www.lvr.com/usb.htm希望对你有用
      

  5.   

    拦截你程序一个窗口的消息循环,如果有usb存储设备插入,会有WM_DEVICECHANGE消息到达
    我看了看你上面的代码,有用WMI的,这也可以,但是感觉WMI不大稳定,有时检测不到这个是我以前的提问,现在解决了,可是我没有用过C#实现,不过 C#是肯定没问题的
    http://community.csdn.net/Expert/topic/4837/4837132.xml?temp=.8857538
      

  6.   

    试试.net2.0的 DriveInfo
    string DriveName;
    do{
       DriveInfo[] drivers = DriveInfo.GetDrives();
       foreach(dirveinfo dirveA in dirves){
        if(dirveA.DriveType==Removable){
          DriveName=dirveA.Name;
          return;
        }
     
      }}while(true)//只大概写了一下,楼主自己试试
      

  7.   

    试试.net2.0的 DriveInfo
    --------------------
    惨,还没用到2.0啊.拦截你程序一个窗口的消息循环
    ---------------------
    谢谢,我在WndProc里拦截了的.但感觉还是很粗糙.总之,谢谢大家了.