strDriveText = drv.VolumeLabel.Trim() == ""?"本地磁盘" : drv.VolumeLabel.Trim();这句老是显示,设备未就绪,IOException was unhandle.这是怎么回事啊

解决方案 »

  1.   

    磁盘有专门的类的,和FIle一眼的,但名称忘了
      

  2.   

    光驱用switch case语句分开读的,
      

  3.   


    DriveType  :  CDRom(光驱)、Fixed(固定磁盘)
    判断一下类型,如果是光驱,就不要读卷标了,没有盘放进去,卷标是没有的。
      

  4.   

    http://blog.csdn.net/fengyarongaa/archive/2011/06/16/6547840.aspxusing System;   
    using System.Runtime.InteropServices;   
    using System.Management;   
    namespace Hardware   
    {   
    /// <summary>   
    /// Hardware_Mac 的摘要说明。   
    /// </summary>   
    public class HardwareInfo   
    {   
    //取机器名   
    public string GetHostName()   
    {   
    return System.Net.Dns.GetHostName();   
    }   
    //取CPU编号   
    public String GetCpuID()   
    {   
    try   
    {   
    ManagementClass mc = new ManagementClass("Win32_Processor");   
    ManagementObjectCollection moc = mc.GetInstances();   
    String strCpuID = null ;   
    foreach( ManagementObject mo in moc )   
    {   
    strCpuID = mo.Properties["ProcessorId"].Value.ToString();   
    break;   
    }   
    return strCpuID;   
    }   
    catch   
    {   
    return "";   
    }   
    }//end method   
    //取第一块硬盘编号   
    public String GetHardDiskID()   
    {   
    try   
    {   
    ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia");   
    String strHardDiskID = null ;   
    foreach(ManagementObject mo in searcher.Get())   
    {   
    strHardDiskID = mo["SerialNumber"].ToString().Trim();   
    break;   
    }   
    return strHardDiskID ;   
    }   
    catch   
    {   
    return "";   
    }   
    }//end   
    public enum NCBCONST   
    {   
    NCBNAMSZ =16, /* absolute length of a net name */   
    MAX_LANA =254, /* lana's in range 0 to MAX_LANA inclusive */   
    NCBENUM =0x37, /* NCB ENUMERATE LANA NUMBERS */   
    NRC_GOODRET =0x00, /* good return */   
    NCBRESET =0x32, /* NCB RESET */   
    NCBASTAT =0x33, /* NCB ADAPTER STATUS */   
    NUM_NAMEBUF =30, /* Number of NAME's BUFFER */   
    }   
    [StructLayout(LayoutKind.Sequential)]   
    public struct ADAPTER_STATUS   
    {   
    [MarshalAs(UnmanagedType.ByValArray, SizeConst=6)]   
    public byte[] adapter_address;   
    public byte rev_major;   
    public byte reserved0;   
    public byte adapter_type;   
    public byte rev_minor;   
    public ushort duration;   
    public ushort frmr_recv;   
    public ushort frmr_xmit;   
    public ushort iframe_recv_err;   
    public ushort xmit_aborts;   
    public uint xmit_success;   
    public uint recv_success;   
    public ushort iframe_xmit_err;   
    public ushort recv_buff_unavail;   
    public ushort t1_timeouts;   
    public ushort ti_timeouts;   
    public uint reserved1;   
    public ushort free_ncbs;   
    public ushort max_cfg_ncbs;   
    public ushort max_ncbs;   
    public ushort xmit_buf_unavail;   
    public ushort max_dgram_size;   
    public ushort pending_sess;   
    public ushort max_cfg_sess;   
    public ushort max_sess;   
    public ushort max_sess_pkt_size;   
    public ushort name_count;   
    }   
    [StructLayout(LayoutKind.Sequential)]   
    public struct NAME_BUFFER   
    {   
    [MarshalAs(UnmanagedType.ByValArray, SizeConst=(int)NCBCONST.NCBNAMSZ)]   
    public byte[] name;   
    public byte name_num;   
    public byte name_flags;   
    }   
    [StructLayout(LayoutKind.Sequential)]   
    public struct NCB   
    {   
    public byte ncb_command;   
    public byte ncb_retcode;   
    public byte ncb_lsn;   
    public byte ncb_num;   
    public IntPtr ncb_buffer;   
    public ushort ncb_length;   
    [MarshalAs(UnmanagedType.ByValArray, SizeConst=(int)NCBCONST.NCBNAMSZ)]   
    public byte[] ncb_callname;   
    [MarshalAs(UnmanagedType.ByValArray, SizeConst=(int)NCBCONST.NCBNAMSZ)]   
    public byte[] ncb_name;   
    public byte ncb_rto;   
    public byte ncb_sto;   
    public IntPtr ncb_post;   
    public byte ncb_lana_num;   
    public byte ncb_cmd_cplt;   
    [MarshalAs(UnmanagedType.ByValArray, SizeConst=10)]   
    public byte[] ncb_reserve;   
    public IntPtr ncb_event;   
    }   
    [StructLayout(LayoutKind.Sequential)]   
    public struct LANA_ENUM   
    {   
    public byte length;   
    [MarshalAs(UnmanagedType.ByValArray, SizeConst=(int)NCBCONST.MAX_LANA)]   
    public byte[] lana;   
    }   
    [StructLayout(LayoutKind.Auto)]   
    public struct ASTAT   
    {   
    public ADAPTER_STATUS adapt;   
    [MarshalAs(UnmanagedType.ByValArray, SizeConst=(int)NCBCONST.NUM_NAMEBUF)]   
    public NAME_BUFFER[] NameBuff;   
    }   
    public class Win32API   
    {   
    [DllImport("NETAPI32.DLL")]   
    public static extern char Netbios(ref NCB ncb);   
    }   
    public string GetMacAddress()   
    {   
    string addr="";   
    try   
    {   
    int cb;   
    ASTAT adapter;   
    NCB Ncb=new NCB();   
    char uRetCode;   
    LANA_ENUM lenum;   
    Ncb.ncb_command = (byte)NCBCONST.NCBENUM;   
    cb = Marshal.SizeOf(typeof(LANA_ENUM));   
    Ncb.ncb_buffer = Marshal.AllocHGlobal(cb);   
    Ncb.ncb_length = (ushort)cb;   
    uRetCode = Win32API.Netbios(ref Ncb);   
    lenum = (LANA_ENUM)Marshal.PtrToStructure(Ncb.ncb_buffer, typeof(LANA_ENUM));   
    Marshal.FreeHGlobal(Ncb.ncb_buffer);   
    if(uRetCode != (short)NCBCONST.NRC_GOODRET)   
    return "";   
    for(int i=0; i < lenum.length ;i++)   
    {   
    Ncb.ncb_command = (byte)NCBCONST.NCBRESET;   
    Ncb.ncb_lana_num = lenum.lana[i];   
    uRetCode = Win32API.Netbios(ref Ncb);   
    if(uRetCode != (short)NCBCONST.NRC_GOODRET)   
    return "";   
    Ncb.ncb_command = (byte)NCBCONST.NCBASTAT;   
    Ncb.ncb_lana_num = lenum.lana[i];   
    Ncb.ncb_callname[0]=(byte)'*';   
    cb = Marshal.SizeOf(typeof(ADAPTER_STATUS)) + Marshal.SizeOf(typeof(NAME_BUFFER))*(int)NCBCONST.NUM_NAMEBUF;   
    Ncb.ncb_buffer = Marshal.AllocHGlobal(cb);   
    Ncb.ncb_length = (ushort)cb;   
    uRetCode = Win32API.Netbios(ref Ncb);   
    adapter.adapt = (ADAPTER_STATUS)Marshal.PtrToStructure(Ncb.ncb_buffer, typeof(ADAPTER_STATUS));   
    Marshal.FreeHGlobal(Ncb.ncb_buffer);   
    if (uRetCode == (short)NCBCONST.NRC_GOODRET)   
    {   
    if(i>0)   
    addr += ":";   
    addr = string.Format("{0,2:X}{1,2:X}{2,2:X}{3,2:X}{4,2:X}{5,2:X}",   
    adapter.adapt.adapter_address[0],   
    adapter.adapt.adapter_address[1],   
    adapter.adapt.adapter_address[2],   
    adapter.adapt.adapter_address[3],   
    adapter.adapt.adapter_address[4],   
    adapter.adapt.adapter_address[5]);   
    }   
    }   
    }   
    catch   
    {}   
    return addr.Replace(' ', '0');   
    }   
    }   
    }   
      

  5.   

    太感谢你们了,呵呵,这几天没来得及看,真对不住,sorry啦
      

  6.   

    http://blog.csdn.net/fengyarongaa/article/details/6547840
      

  7.   

    这个其实是一个资源管理器,循环读的代码如下
     foreach (DriveInfo drv in DriveInfo.GetDrives())
                {
                    TreeNode tnDrive = new TreeNode();
                    tnDrive.Name = drv.Name;
                    switch (drv.DriveType)
                    {
                        case DriveType.CDRom:
                            tnDrive.ImageIndex = 2;
                            strDriveText = "CDRom";
                            break;
                        //case DriveType.Fixed:
                        //    break;
                        //case DriveType.Network:
                        //    break;
                        //case DriveType.NoRootDirectory:
                        //    break;
                        //case DriveType.Ram:
                        //    break;
                        //case DriveType.Removable:
                        //    break;
                        //case DriveType.Unknown:
                        //    break;
                        default:
                            tnDrive.ImageIndex = 1;
                            strDriveText = drv.VolumeLabel.Trim() == "" ? "本地磁盘" : drv.VolumeLabel.Trim();(这句显示IO设备未就绪,编译时出现drv成员下{A:/})
                            break;
                    }
                    strDriveText += "(" + drv.Name.Substring(0, 2) + ")";
                    tnDrive.Text = strDriveText;
                    tnDrive = GetNextDirectory(drv.Name, tnDrive);
                    tnTop.Nodes.Add(tnDrive);
                }
                treeView1.Nodes.Add(tnTop);