忍者ブログ
NINJA
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

ドライブ情報を取得する。


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::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);
}


カレンダー
04 2025/05 06
S M T W T F S
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
フリーエリア
最新CM
最新TB
プロフィール
HN:
No Name Ninja
性別:
非公開
バーコード
ブログ内検索
アーカイブ
P R
Powered by ニンジャブログ  Designed by ゆきぱんだ
Copyright (c) Visual Studio C++のお勉強 All Rights Reserved
忍者ブログ / [PR]