Any idea how to find a thumb drive?
You could try putting a file of certain name on the drive
and search for that in the root of every drive.
Else, you could just find the last valid drive letter,
and you have some chance that it is the usb device.
Or else you could just find the drive with the smallest
capacity (excuding floppies), but that may fail to work
later if usb devices get cheaper.
| [reply] |
| [reply] |
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:
http://www.roth.net/perl/adminmisc/ | [reply] [d/l] |
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
Thanks!
| [reply] |
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)
GetDrives($Type)
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:
DRIVE_FIXED
DRIVE_REMOVABLE
DRIVE_REMOTE
DRIVE_CDROM
DRIVE_RAMDISK
Example:
@Drives = Win32::AdminMisc::GetDrives();
@CDROMs = Win32::AdminMisc::GetDrives( DRIVE_CDROM );
Returns:
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)
Example:
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;;
}
Returns:
hash if successful
undef if not successful
| [reply] |