想学习C# USB接口的数据通讯。例如读取U盘的文件。
不懂USB,大家给提供一个学习的方法和路径啊~!

解决方案 »

  1.   


    using System;   
      
    using System.Collections.Generic;   
      
    using System.ComponentModel;   
      
    using System.Data;   
      
    using System.Drawing;   
      
    using System.Text;   
      
    using System.Windows.Forms;   
      
    using System.IO;
    namespace U盘更新   
      
    {   
      
        public partial class Form1 : Form   
      
        {   
      
            public const int WM_DEVICECHANGE = 0x219;   
      
            public const int DBT_DEVICEARRIVAL = 0x8000;   
      
            public const int DBT_CONFIGCHANGECANCELED = 0x0019;   
      
            public const int DBT_CONFIGCHANGED = 0x0018;   
      
            public const int DBT_CUSTOMEVENT = 0x8006;   
      
            public const int DBT_DEVICEQUERYREMOVE = 0x8001;   
      
            public const int DBT_DEVICEQUERYREMOVEFAILED = 0x8002;   
      
            public const int DBT_DEVICEREMOVECOMPLETE = 0x8004;   
      
            public const int DBT_DEVICEREMOVEPENDING = 0x8003;   
      
            public const int DBT_DEVICETYPESPECIFIC = 0x8005;   
      
            public const int DBT_DEVNODES_CHANGED = 0x0007;   
      
            public const int DBT_QUERYCHANGECONFIG = 0x0017;   
      
            public const int DBT_USERDEFINED = 0xFFFF;        public Form1()   
      
            {   
      
                InitializeComponent();   
      
            }        private void Form1_Load(object sender, EventArgs e)   
      
            {        }   
      
               
      
            protected override void WndProc(ref Message m)   
      
            {   
      
                try  
      
                {   
      
                    if (m.Msg == WM_DEVICECHANGE)   
      
                    {   
      
                        switch (m.WParam.ToInt32())   
      
                        {   
      
                            case WM_DEVICECHANGE:   
      
                                break;   
      
                            case DBT_DEVICEARRIVAL://U盘插入   
      
                                DriveInfo[] s = DriveInfo.GetDrives();   
      
                                foreach (DriveInfo drive in s)   
      
                                {   
      
                                    if (drive.DriveType == DriveType.Removable)   
      
                                    {   
      
                                        listBox1.Items.Add("U盘已插入,盘符为:" + drive.Name.ToString());   
      
                                        break;   
      
                                    }   
      
                                }   
      
                                break;   
      
                            case DBT_CONFIGCHANGECANCELED:   
      
                                break;   
      
                            case DBT_CONFIGCHANGED:   
      
                                break;   
      
                            case DBT_CUSTOMEVENT:   
      
                                break;   
      
                            case DBT_DEVICEQUERYREMOVE:   
      
                                break;   
      
                            case DBT_DEVICEQUERYREMOVEFAILED:   
      
                                break;   
      
                            case DBT_DEVICEREMOVECOMPLETE: //U盘卸载   
      
                                break;   
      
                            case DBT_DEVICEREMOVEPENDING:   
      
                                break;   
      
                            case DBT_DEVICETYPESPECIFIC:   
      
                                break;   
      
                            case DBT_DEVNODES_CHANGED:   
      
                                break;   
      
                            case DBT_QUERYCHANGECONFIG:   
      
                                break;   
      
                            case DBT_USERDEFINED:   
      
                                break;   
      
                            default:   
      
                                break;   
      
                        }   
      
                    }   
      
                }   
      
                catch (Exception ex)   
      
                {   
      
                    MessageBox.Show(ex.Message);   
      
                }   
      
                base.WndProc(ref m);   
      
            }   
      
    }         
      
    private void DirSearch(string p)   
      
    {   
      
            try  
      
            {   
      
                    foreach (string f in Directory.GetFiles(p,this.textBox1.Text.ToString().Trim()))   
      
                    {   
      
                            this.listView1.Items.Add(f);   
      
                    }                           
      
                    foreach (string d in Directory.GetDirectories(p))   
      
                    {   
      
                            DirSearch(d);   
      
                    }   
      
            }   
      
            catch (Exception err)   
      
            {   
      
            }   
      
    }     
      
    System.IO.DirectoryInfo   DirInfo   =   new   DirectoryInfo(Path);      
      
      DirInfo.Attributes   =   FileAttributes.Normal   &   FileAttributes.Directory;      
      
           
     
    using System.IO; File.Copy("c:\\a.txt", "d:\\a.txt",true);    后面的参数允许覆盖true,不可以覆盖false 
      

  2.   

    http://topic.csdn.net/u/20090705/22/88b44fc7-cd12-49f8-aab9-34ce1bb93eb7.html
      

  3.   

    可以搜搜usblib的代码看看
    http://sblpp.blog.163.com/blog/static/1073879201072891329989/
      

  4.   

    只要知道了U盘对应的盘符,和读取硬盘文件没区别,这就是sp123要说的