1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
|
AnsiString temp;
AnsiString Drive = AnsiString(DriveComboBox1->Drive); //EditDrive->Text;
unsigned int drivetype = GetDriveType(Drive.c_str ());
switch (drivetype)
{
case 1 : temp = "No root directory"; return;
case DRIVE_REMOVABLE : temp = "Removable"; break;
case DRIVE_FIXED : temp = "Fixed"; break;
case DRIVE_REMOTE : temp ="Remote (network) drive"; break;
case DRIVE_CDROM : temp = "CD-ROM"; break;
case DRIVE_RAMDISK : temp = "RAM disk"; break;
default: temp = "Unknown"; return;
}
LabelDriveType->Caption = temp;
temp = "";
DWORD VolumeSerialNumber = 0;
DWORD MaximumComponentLength = 0;
DWORD FileSystemFlags = 0;
char * volumeinfo = new char[255];
volumeinfo[0] = 0;
char* FileSystemNameBuffer = new char[255];
FileSystemNameBuffer[0] = 0;
GetVolumeInformation (Drive.c_str (), volumeinfo, 255,&VolumeSerialNumber,
&MaximumComponentLength, &FileSystemFlags,
FileSystemNameBuffer,255);
if (strlen(volumeinfo) != 0)
EditVolumeInfo->Text = volumeinfo ;
else
EditVolumeInfo->Text = "- no label -";
//Translate integer to chars for serial number
char string1[35];
char string2[35];
if (VolumeSerialNumber > 0)
{
unsigned int bottom = (LOWORD(VolumeSerialNumber));
unsigned int top = (HIWORD(VolumeSerialNumber));
sprintf(string1,"%04X",top);
sprintf(string2,"%04X",bottom);
LabelSerialNum->Caption = AnsiString(string1) + "-" + AnsiString(string2);
}
else
{
LabelSerialNum->Caption = "- unknown -";
if (MaximumComponentLength > 0)
LabelMaxComponentLength->Caption = AnsiString(MaximumComponentLength) + "characters";
else
LabelMaxComponentLength->Caption = "- unknown -";
if (strlen(FileSystemNameBuffer) != 0)
LabelFileSystemNameBuffer->Caption = FileSystemNameBuffer;
else
LabelFileSystemNameBuffer->Caption = "- unknown -";
LabelFileSystemFlags->Caption = ""; //AnsiString(FileSystemFlags);
if (FileSystemFlags & FS_CASE_IS_PRESERVED)
temp += AnsiString("Filename case is preserved.\n");
if (FileSystemFlags & FS_CASE_SENSITIVE)
temp += AnsiString("Lookup is case-sensitive.\n");
if (FileSystemFlags & FS_UNICODE_STORED_ON_DISK)
temp += AnsiString("Supports Unicode in filenames.\n");
if (FileSystemFlags & FS_PERSISTENT_ACLS)
temp += AnsiString("Preserves and enforces ACLs.\n");
if (FileSystemFlags & FS_FILE_COMPRESSION)
temp += AnsiString("Supports file-based compression.\n");
if (FileSystemFlags & FS_VOL_IS_COMPRESSED)
temp += AnsiString("Volume is compressed. (i.e., DoubleSpace).\n");
LabelFileSystemFlags->Caption = temp;
DWORD spc = 0; //Sectors per cluster
DWORD bps = 0; //Bytes per cluster
DWORD cluster = 0; //clusters
DWORD freeclust = 0; //freeclusters
GetDiskFreeSpace (Drive.c_str (),&spc,&bps,&freeclust,&cluster) ;
unsigned long v1 = (unsigned long)cluster;
unsigned long v2 = (unsigned long) spc;
unsigned long v3 = (unsigned long) bps;
unsigned long volsize = (v1 * v2)/1024 * v3;
LabelVolumeSize->Caption = AnsiString(FormatSize(volsize));
unsigned long free_bytes = (freeclust * spc)/1024 * bps;
LabelFreeSpace->Caption = AnsiString(FormatSize(free_bytes));
if (volsize > 0)
LabelUsed->Caption = AnsiString(((volsize - free_bytes) * 100) / volsize) +" %";
else
LabelUsed->Caption = "n/a";
}
};
|