【VC++】CFile::GetStatusでファイルステータスを取得する
<機能>
(1)ファイル選択ダイアログでファイルを指定します
(2)指定ファイルのCFile::GetStatusでファイルステータスを取得します
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
<イメージ>
<使い方>
(1)"Windowsデスクトップウィザード" を選択します
(2)コンソールアプリケーション(.exe)を選択します
(3)MFCにチェックを入れます
(4)コードを記述します
const int DMAX_FILEPATH = 4096;
//プロトタイプ宣言
BOOL GetAttribute(CString csBuff);
BOOL GetFilePath(CString csCur, CString &csBuff);
//プロトタイプ宣言
BOOL GetAttribute(CString csBuff);
BOOL GetFilePath(CString csCur, CString &csBuff);
using namespace std;
int main()
{
int nRetCode = 0;
{
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));
{
//~~省略~~
}
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;
}
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;
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";
}
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;
}
else {
return FALSE;
}
AfxMessageBox(csMsg,MB_ICONINFORMATION);
return TRUE;
}
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);
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;
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);
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;
}
csCur = csBuff.Left(csBuff.ReverseFind(c));
csBuff.ReleaseBuffer();
return TRUE;
}
よろしければポチッと押してください