繁体   English   中英

连接到机器的USB设备的路径?

[英]Path of the USB devices which are connected to the machine?

如果我有一些连接到本机的USB设备,我怎么知道访问每个USB设备的路径?

有没有办法通过代码知道它?

赞许Ardman的回答。 完善。 要对其稍加修改,我想在其中找到驱动器类型的地方对其进行修改。 它应该可以解决您的问题。

DriveInfo[] mydrives = DriveInfo.GetDrives();

        foreach (DriveInfo mydrive in mydrives)
        {
            if (mydrive.DriveType == DriveType.Removable)
            {
                Console.WriteLine("\nRemovable disk");
                Console.WriteLine("Drive: {0}", mydrive.Name);
                Console.WriteLine("Type: {0}", mydrive.DriveType);                    
            }
            else
            {
                Console.WriteLine("\nNon Removable disk\n");
                Console.WriteLine("Drive: {0}", mydrive.Name);
                Console.WriteLine("Type: {0}", mydrive.DriveType);                   
            }
        }

或者,如果您想获取特定的驱动器名称,也可以这样做。 请注意,这些都是来自网络的示例,因此特定的作者应该得到好评。 我所做的就是使用这些代码段创建一个完整的程序,以便您理解。

[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
    static extern bool GetVolumeInformation(string Volume, StringBuilder VolumeName, uint VolumeNameSize,out uint SerialNumber, out uint SerialNumberLength, out uint flags,StringBuilder fs, uint fs_size);

首先按原样编写此函数。 它使用kernel32.dll获取驱动器信息。 然后,在主要功能中,您可以简单地添加这些代码(如果是控制台应用程序,或者您具有GUI,则可以适当地执行这些操作。)

uint serialNum, serialNumLength, flags;
        StringBuilder volumename = new StringBuilder(256);
        StringBuilder fstype = new StringBuilder(256);
        bool ok = false;
        //Cursor.Current = Cursors.WaitCursor;
        foreach (string drives in Environment.GetLogicalDrives())
        {
            ok = GetVolumeInformation(drives, volumename, (uint)volumename.Capacity - 1, out serialNum,
                                   out serialNumLength, out flags, fstype, (uint)fstype.Capacity - 1);
            if (ok)
            {
                Console.WriteLine( "\n Volume Information of " + drives + "\n");
                Console.WriteLine( "\nSerialNumber of is..... " + serialNum.ToString() + " \n");
                if (volumename != null)
                {
                    Console.WriteLine("VolumeName is..... " + volumename.ToString() + " \n");
                }
                if (fstype != null)
                {
                    Console.WriteLine( "FileType is..... " + fstype.ToString() + " \n");
                }
            }
            ok = false;
        }

我想这应该是您的完整答案。

DriveInfo[] mydrives = DriveInfo.GetDrives();

foreach (DriveInfo mydrive in mydrives)
{
    Console.WriteLine("Drive: {0}", mydrive.Name);
    Console.WriteLine("Type: {0}", mydrive.DriveType);
}

该代码将遍历每个驱动器,您将看到USB驱动器出现。 请注意, DriveType将显示为Removable而不是USB

有关DriveType的更多信息。

或者,您可以执行以下操作(在我的示例中,我将驱动器列表更新为组合框):

drives = DriveInfo.GetDrives().Where(drive => drive.IsReady && drive.DriveType == DriveType.Removable).ToArray();

        if (drives.Length == 0)
        {
            drivesBox.Items.Add("No USB Stick found.");
            formatButton.Enabled = false;
        }
        else
        {
            foreach (DriveInfo drive in drives)
            {
                drivesBox.Items.Add(drive.VolumeLabel + " (" + drive.Name + ")");
            }
            formatButton.Enabled = true;
        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM