ドライブ情報を取得する。
void xxxxxx::GetDriveInformation( CString strDrive, CString* strDriveName )
{
CUtils mc_utils;
CString DiskSerialNumber; // Diskシリアル番号
CString VolumeName; // 指定ドライブのボリューム名
CString FormatStyle; // フォーマット形式
CString FindDrive= strDrive; //デフォルト値
UINT oldMode=SetErrorMode(SEM_NOOPENFILEERRORBOX);
TCHAR lpNameBuffer[255], //指定したDISKのボリューム名
lpFileSystemNameBuffer[255]; //フォーマット形式
DWORD SerialNumber= 0, // ボリュームシリアルナンバーを格納する変数へのポインタ
MaximumComponentLength, // ファイル名構成要素の最大長を格納する変数へのポインタ
lpFileSystemFlags; // ファイルシステムフラグを格納する変数へのポインタ
if (FindDrive == ""){
/*ドライブ指定*/
FindDrive = "c:\\";
}
if(::GetVolumeInformation( FindDrive,
lpNameBuffer,
255,&SerialNumber,
&MaximumComponentLength,
&lpFileSystemFlags,lpFileSystemNameBuffer,255) == 0)
{
return;
}
else{
CString wStr = _T("");
wStr.Format( _T("%u") ,SerialNumber); //unsigned
DiskSerialNumber = wStr; //Diskシリアル番号
VolumeName = lpNameBuffer; //Cドライブのボリューム名
FormatStyle = lpFileSystemNameBuffer; //フォーマット形式
}
SetErrorMode(oldMode);
mc_utils.LpstrToString( (char*)mc_utils.CStringToLptstr( lpNameBuffer), *strDriveName );
}
void xxxxxx::GetDriveInformation( CString strDrive, CString* strDriveName )
{
CUtils mc_utils;
CString DiskSerialNumber; // Diskシリアル番号
CString VolumeName; // 指定ドライブのボリューム名
CString FormatStyle; // フォーマット形式
CString FindDrive= strDrive; //デフォルト値
UINT oldMode=SetErrorMode(SEM_NOOPENFILEERRORBOX);
TCHAR lpNameBuffer[255], //指定したDISKのボリューム名
lpFileSystemNameBuffer[255]; //フォーマット形式
DWORD SerialNumber= 0, // ボリュームシリアルナンバーを格納する変数へのポインタ
MaximumComponentLength, // ファイル名構成要素の最大長を格納する変数へのポインタ
lpFileSystemFlags; // ファイルシステムフラグを格納する変数へのポインタ
if (FindDrive == ""){
/*ドライブ指定*/
FindDrive = "c:\\";
}
if(::GetVolumeInformation( FindDrive,
lpNameBuffer,
255,&SerialNumber,
&MaximumComponentLength,
&lpFileSystemFlags,lpFileSystemNameBuffer,255) == 0)
{
return;
}
else{
CString wStr = _T("");
wStr.Format( _T("%u") ,SerialNumber); //unsigned
DiskSerialNumber = wStr; //Diskシリアル番号
VolumeName = lpNameBuffer; //Cドライブのボリューム名
FormatStyle = lpFileSystemNameBuffer; //フォーマット形式
}
SetErrorMode(oldMode);
mc_utils.LpstrToString( (char*)mc_utils.CStringToLptstr( lpNameBuffer), *strDriveName );
}
PR
有効なドライブを取得する。
void xxxxxx::GetDrive( CStringArray& strArrDrive, int iDriveType )
{
//0:ALL
//1:ハードディスク
//2:リムーバブルディスク( FD / MO 等 )
//3:CD-ROM/CD-RW
int iDTypes = iDriveType; // 検索対象:HDD
DWORD drv;
char SvDrv[8];
CStringArray CSAdrives;
drv = GetLogicalDrives();
if(drv==0) return;
for (int lpcnt = 0;lpcnt < 26;lpcnt++){ //a->Zまで
if (drv & (1L << lpcnt)){ //i番目のビットを取り出し(マスク)
wsprintfW( (LPWSTR)SvDrv, _T("%c:\\"),lpcnt + 'A');
switch( iDTypes )
{
case 0://ALL DriveGet
//pListView->AddString(SvDrv);
strArrDrive.Add( (LPCTSTR)SvDrv );
break;
case 1:
// HDD
if ( GetDriveTypeW( (LPCWSTR)SvDrv) == DRIVE_FIXED ){
strArrDrive.Add( (LPCTSTR)SvDrv );
}
break;
case 2:
// リムーバルディスク
if ( GetDriveTypeW((LPCWSTR)SvDrv) == DRIVE_REMOVABLE){
strArrDrive.Add( (LPCTSTR)SvDrv );
}
break;
case 3:
// CD-ROM
if ( GetDriveTypeW((LPCWSTR)SvDrv) == DRIVE_CDROM ){
strArrDrive.Add( (LPCTSTR)SvDrv );
}
break;
default:
strArrDrive.Add( (LPCTSTR)SvDrv );
break;
}
}
}
}
void xxxxxx::GetDrive( CStringArray& strArrDrive, int iDriveType )
{
//0:ALL
//1:ハードディスク
//2:リムーバブルディスク( FD / MO 等 )
//3:CD-ROM/CD-RW
int iDTypes = iDriveType; // 検索対象:HDD
DWORD drv;
char SvDrv[8];
CStringArray CSAdrives;
drv = GetLogicalDrives();
if(drv==0) return;
for (int lpcnt = 0;lpcnt < 26;lpcnt++){ //a->Zまで
if (drv & (1L << lpcnt)){ //i番目のビットを取り出し(マスク)
wsprintfW( (LPWSTR)SvDrv, _T("%c:\\"),lpcnt + 'A');
switch( iDTypes )
{
case 0://ALL DriveGet
//pListView->AddString(SvDrv);
strArrDrive.Add( (LPCTSTR)SvDrv );
break;
case 1:
// HDD
if ( GetDriveTypeW( (LPCWSTR)SvDrv) == DRIVE_FIXED ){
strArrDrive.Add( (LPCTSTR)SvDrv );
}
break;
case 2:
// リムーバルディスク
if ( GetDriveTypeW((LPCWSTR)SvDrv) == DRIVE_REMOVABLE){
strArrDrive.Add( (LPCTSTR)SvDrv );
}
break;
case 3:
// CD-ROM
if ( GetDriveTypeW((LPCWSTR)SvDrv) == DRIVE_CDROM ){
strArrDrive.Add( (LPCTSTR)SvDrv );
}
break;
default:
strArrDrive.Add( (LPCTSTR)SvDrv );
break;
}
}
}
}
ドライブの空き容量を確認する。
void xxxxxx::GetDriveVolum( CString strDrive, int& iFreeBytes )
{
DWORDLONG dwlFreeBytesAvailableToCaller;
DWORDLONG dwlTotalNumberOfBytes;
DWORDLONG dwlTotalNumberOfFreeBytes;
CString strTemp;
//**************************************************************
// strDrive :指定ドライブ
// &dwlFreeBytesAvailableToCaller :ユーザー割り当て空き容量
// &dwlTotalNumberOfBytes :ディスク総容量
// &dwlTotalNumberOfFreeBytes :ディスク実空き容量
//**************************************************************
//ディスクの空き容量などを表示
if(GetDiskFreeSpaceEx(strDrive,
reinterpret_cast<PULARGE_INTEGER>(&dwlFreeBytesAvailableToCaller),
reinterpret_cast<PULARGE_INTEGER>(&dwlTotalNumberOfBytes),
reinterpret_cast<PULARGE_INTEGER>(&dwlTotalNumberOfFreeBytes)))
{
strTemp.Format(_T("ユーザー割り当て空き容量 :%dMB\nディスク総容量 :%dMB\nディスク実空き容量 :%dMB"),
static_cast<int>(dwlFreeBytesAvailableToCaller/1024/1024),
static_cast<int>(dwlTotalNumberOfBytes/1024/1024),
static_cast<int>(dwlTotalNumberOfFreeBytes/1024/1024));
}
iFreeBytes = static_cast<int>(dwlTotalNumberOfFreeBytes/1024/1024);
}
void xxxxxx::GetDriveVolum( CString strDrive, int& iFreeBytes )
{
DWORDLONG dwlFreeBytesAvailableToCaller;
DWORDLONG dwlTotalNumberOfBytes;
DWORDLONG dwlTotalNumberOfFreeBytes;
CString strTemp;
//**************************************************************
// strDrive :指定ドライブ
// &dwlFreeBytesAvailableToCaller :ユーザー割り当て空き容量
// &dwlTotalNumberOfBytes :ディスク総容量
// &dwlTotalNumberOfFreeBytes :ディスク実空き容量
//**************************************************************
//ディスクの空き容量などを表示
if(GetDiskFreeSpaceEx(strDrive,
reinterpret_cast<PULARGE_INTEGER>(&dwlFreeBytesAvailableToCaller),
reinterpret_cast<PULARGE_INTEGER>(&dwlTotalNumberOfBytes),
reinterpret_cast<PULARGE_INTEGER>(&dwlTotalNumberOfFreeBytes)))
{
strTemp.Format(_T("ユーザー割り当て空き容量 :%dMB\nディスク総容量 :%dMB\nディスク実空き容量 :%dMB"),
static_cast<int>(dwlFreeBytesAvailableToCaller/1024/1024),
static_cast<int>(dwlTotalNumberOfBytes/1024/1024),
static_cast<int>(dwlTotalNumberOfFreeBytes/1024/1024));
}
iFreeBytes = static_cast<int>(dwlTotalNumberOfFreeBytes/1024/1024);
}