【VC++】CFile::GetStatusでファイルステータスを取得する

0

    <機能>

    (1)ファイル選択ダイアログでファイルを指定します

    (2)指定ファイルのCFile::GetStatusでファイルステータスを取得します

     

    CFileStatus構造体
    CTime m_ctime ファイルの作成日時
    CTime m_mtime ファイルの最終更新日時
    CTime m_atime ファイルが読み取りで最後にアクセスされた日時
    ULONGLONG m_size ファイルの論理サイズ
    BYTE m_attribute ファイル属性
    char m_szFullName ファイルパス

     

    (3)ファイル属性(m_attribute)を取得します

    (4)ファイルステータスの取得結果をメッセージボックスで表示します

     

    <動作検証&開発環境>
    Visual Studio Community 2017

     

    <イメージ>

    CFile,GetStatus,CFileStatus,m_attribute,

     

    <使い方>

    (1)"Windowsデスクトップウィザード" を選択します

    (2)コンソールアプリケーション(.exe)を選択します

    (3)MFCにチェックを入れます

    CFile,GetStatus,ウィザード,

    (4)コードを記述します

     

    const int DMAX_FILEPATH = 4096;
    //プロトタイプ宣言
    BOOL GetAttribute(CString csBuff);
    BOOL GetFilePath(CString csCur, CString &csBuff);
    using namespace std;
    int main()
    {

        int nRetCode = 0;
        HMODULE hModule = ::GetModuleHandle(nullptr);
        if (hModule != nullptr)
        {

            //~~省略~~
            }
            else
            {

                //バッファ宣言
                CString csBuff("");
                CString csCur("");
               
                //ファイル選択ダイアログの初期値に実行フォルダを指定
                wchar_t wct[DMAX_FILEPATH];
                ZeroMemory(&wct, sizeof(wct));
                GetModuleFileName(NULL, wct, sizeof(wct));
                CString cwk;
                cwk.Format(L"%s",wct);
                wchar_t c = L'¥u00A5'; //C4566警告対応
                csCur = cwk.Left(cwk.ReverseFind(c));
                //ファイル選択ダイアログでファイル指定
                if(!GetFilePath(csCur,csBuff))
                {
                    return nRetCode;
                }
                //ファイルの属性を取得する
                if (!GetAttribute(csBuff))
                {
                    return nRetCode;
                }
            }
        }
        else
        {
            // TODO: 必要に応じてエラー コードを変更してください。
            wprintf(L"致命的なエラー: GetModuleHandle が失敗しました¥n");
            nRetCode = 1;
        }
        return nRetCode;
    }
    /***********************************************************
    GetAttribute
    ファイルの属性を取得する
    詳細はDeveloper Network(CFile::GetSatus)参照
    パラメータ
     csBuff : 選択ファイル
    戻り値
     true : CFileStatus取得成功
     false : CFileStatus取得失敗
    ***********************************************************/

    BOOL GetAttribute(CString csBuff)
    {
        CString csMsg(""), cwk("");
        CFileStatus status;
        CFile cfile;
        if (cfile.GetStatus(csBuff, status))
        {
            //CTimeオブジェクトを書式設定
            //ファイルパス
            cwk.Format(L"ファイルパス : %s¥n",status.m_szFullName);
            csMsg = cwk;
            //ファイルサイズ
            cwk.Format(L"ファイルサイズ : %I64uバイト¥n",status.m_size);
            csMsg += cwk;
            //ファイル作成日時
            cwk = status.m_ctime.Format(L"ファイルの作成日時 : %Y-%m-%d %H:%M:%S¥n");
            csMsg += cwk;
            //ファイル最終更新日時
            cwk = status.m_mtime.Format(L"ファイルの最終更新日時 : %Y-%m-%d %H:%M:%S¥n");
            csMsg += cwk;
            //ファイル最終アクセス日時
            cwk = status.m_atime.Format(L"ファイルの最終アクセス日時 : %Y-%m-%d %H:%M:%S¥n");
            csMsg += cwk;
            //アトリビュート(読み取り専用)
            if (status.m_attribute & CFile::readOnly)
            {
                csMsg += L"CFile::readOnly(0x01)¥n";
            }
            //アトリビュート(隠しファイル)
            if (status.m_attribute & CFile::hidden)
            {
                csMsg += L"CFile::hidden(0x02)¥n";
            }
            //アトリビュート(システムファイル)
            if (status.m_attribute & CFile::system)
            {
                csMsg += L"CFile::system(0x04)¥n";
            }
            //アトリビュート(ディレクトリ)
            if (status.m_attribute & CFile::directory)
            {
                csMsg += L"CFile::directory(0x10)¥n";
            }
        }
        else {
            return FALSE;
        }
        AfxMessageBox(csMsg,MB_ICONINFORMATION);
        return TRUE;
    }
    /***********************************************************
    SelectFile
    ファイルダイアログでファイルを選択する
    詳細はDeveloper Network(CFileDialog)参照
    パラメータ
     csCur[in] : ファイル選択ダイアログの初期表示フォルダ
     csBuff[out] : 選択ファイル
    戻り値
     true : ファイル選択ダイアログでファイルが選択された
     false : ファイル選択ダイアログでキャンセルされた
    ***********************************************************/

    BOOL GetFilePath(CString csCur,CString &csBuff)
    {
        csBuff = "";
        wchar_t *p = csBuff.GetBuffer(DMAX_FILEPATH);
       
        //ファイルを開くダイアログ:TRUE
        //ファイルを保存ダイアログ:FALSE
        CFileDialog dlg(TRUE);
        //OPENFILENAME構造体に値をセット
        OPENFILENAME &ofn = dlg.GetOFN();
        //ダイアログタイトル
        ofn.lpstrTitle = L"ファイルを1つ選択してください";
        //存在するファイル名のみ選択できる
        ofn.Flags |= OFN_FILEMUSTEXIST;
        //初期表示フォルダ
        ofn.lpstrInitialDir = csCur;
        //ファイル選択ダイアログ表示
        if (dlg.DoModal() != IDOK)
        {
            csBuff.ReleaseBuffer();
            return FALSE;
        }
        POSITION pos = dlg.GetStartPosition();
        csBuff = dlg.GetNextPathName(pos);
        wchar_t c = L'¥u00A5';  //C4566警告対応
        csCur = csBuff.Left(csBuff.ReverseFind(c));
        csBuff.ReleaseBuffer();
        return TRUE;
    }

    よろしければポチッと押してください


    プログラマー ブログランキングへ

     



    selected entries

    categories

    calendar

    S M T W T F S
         12
    3456789
    10111213141516
    17181920212223
    24252627282930
    31      
    << March 2024 >>

    profile

    others

    archives