Beefy Boxes and Bandwidth Generously Provided by pair Networks
more useful options

Re^3: USB Drive Letter Assignment in Win32

by Zero_Flop (Pilgrim)
on Jun 07, 2004 at 18:38 UTC ( #362069=note: print w/replies, xml ) Need Help??

in reply to Re^2: USB Drive Letter Assignment in Win32
in thread USB Drive Letter Assignment in Win32

Sorry for the late responce--

Give the drive a Label "USBDrive" then...
use Win32::AdminMisc; %Info = Win32::AdminMisc::GetVolume($drive); print "Drive label is $Info{Volume}\n";
Cycle through all the attached drives and then you will be able to find the drive you are looking for.
See the doc for complete info:

Replies are listed 'Best First'.
Re^4: USB Drive Letter Assignment in Win32
by traveler (Parson) on Jun 08, 2004 at 17:30 UTC
    I installed the ppd and then ran this code. Perl whined about no GetVolume and I could not find it either. I have version 2003.07.14


      From the information at the Roth site, you will need probably two calls, 
      GetDrives to get an array of all drives and GetVolumeInfo. (sorry not GetVolume)
      This will return an array of drive roots. If no parameters are passed then the list will be all drives 
      (cdroms, floppy, fixed, net, etc.).
      If you specify $Type the list will only contain drive roots
       that are of the specified type.
      The types are:
      @Drives = Win32::AdminMisc::GetDrives();
      @CDROMs = Win32::AdminMisc::GetDrives( DRIVE_CDROM );
      nothing if unsuccessful
      array if successful
      GetVolumeInfo( $Drive )
      This will return a hash of drive volume information for the $Drive drive. 
      $Drive must be a root directory such as "c:\\" or "X:/". $Drive may be a UNC.
      Returned keys are:
      $Volume...............The volume label for the drive.
      $Serial...............The serial number for the drive (in decimal)
      $MaxFileNameLength....The max number of chars a file name can be for drive.
      SystemFlag...........System flags which can be combination of:
      FS_CASE_IS_PRESERVED....The case of filenames are stored on the disk.
      (for example DOS makes file names uppercase)
      FS_CASE_SENSITIVE ......File system supports case sensitive filenames.
      FS_UNICODE_STORED_ON_DISK...File system supports unicode filenames.
      FS_PERSISTENT_ACLS......File System saves and enforces access control
      lists (aka file permissions)
      FS_FILE_COMPRESSION ....File system supports file based compression.
      FS_VOL_IS_COMPRESSED....Volume is compressed (as in using DoubleSpace).
      $::ThisPageSystemName.......The name of the format of the drive (eg. NTFS, FAT)
      if( %Volume = Win32::AdminMisc::GetVolume("//server1/c\$") )
          my $Serial = uc( sprintf( "%x", $Volume{Serial} ) );
          $Serial =~ s/(....)(....)/$1-$2/;
          print "The drive is formatted with the $Volume{FileSystemName} format.\n";
          print "The volume serial number is: $Serial\n%quot;;
       hash if successful
       undef if not successful
        Great. Thank you. I have a short demo working:
        use Win32::AdminMisc; @drives = Win32::AdminMisc::GetDrives( DRIVE_REMOVABLE ); foreach $drive (@drives){ %Info = Win32::AdminMisc::GetVolumeInfo($drive); # print "Drive $drive label is $Info{Volume}\n"; print "Found USBDRIVE at $drive\n" if $Info{Volume} eq 'USBDRIVE'; }

Log In?

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://362069]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others romping around the Monastery: (3)
As of 2022-09-28 21:26 GMT
Find Nodes?
    Voting Booth?
    I prefer my indexes to start at:

    Results (125 votes). Check out past polls.