VC ++实现 对文件的 隐藏, 只读 ,创建时间 , 最后修改时间 ,最后访问时间 属性的修改

考完六级心情大好,去论坛逛了逛,做了几个作业,总结下用到的函数和方法


整体功能如下:


其中还有获取当前系统时间并格式化输出的功能,界面上没有体现出来。


窗口界面控件统计及关联变量如下:

编辑框:ID:  IDC_EDIT_FILEPATH   


属性设置:

      只读:CheckBox  控件  关联变量:BOOL   m_IsReadOnly      隐藏  :CheckBox   关联变量:BOOL m_IsHidden  


文件时间自定义:

     创建时间:Date Time Picker 控件   关联变量:控件变量  m_CreateTime

     创建时间:Date Time Picker 控件   关联变量:控件变量  m_ModifyTime


为框架类添加成员变量: CString  m_filepath


功能函数:


一,让对话框支持通过拖放方式选择文件

1,首先设置对话框的:Accept Files: True


2, 对话框.h中(消息映射表中)添加
    afx_msg void OnDropFiles(HDROP hDropInfo);

3, .cpp,消息map中添加
    ON_WM_DROPFILES()

void CXXXXDlg::OnDropFiles(HDROP hDropInfo) 
{
    // TODO: Add your message handler code here and/or call default
        CString filename;
        DragQueryFile(hDropInfo,0,filename.GetBuffer(512),512);
        filename.ReleaseBuffer();

        m_filepath = filename;
	   SetDlgItemText(IDC_EDIT_FILEPATH,m_filepath);

    CDialog::OnDropFiles(hDropInfo);
} 



二,点击选择按钮,弹出文件选择对话框,设置在列表中显示的文件类型

void CXXXXDlg::OnBnClickedBtnSelectfile()
{
	// TODO: 在此添加控件通知处理程序代码
	CFileDialog fileDlg(true);
	fileDlg.m_ofn.lpstrTitle = "选择你要设置的文件";
	fileDlg.m_ofn.lpstrFilter = "Executeable File(*.exe)\0*.exe\0All Files(*.*)\0*.*\0\0";

	if(IDOK==fileDlg.DoModal())
	{
		m_filepath = fileDlg.GetPathName();
		SetDlgItemText(IDC_EDIT_FILEPATH,m_filepath);
	}
}



三,接收用户的选择,单击“设置属性“按钮设置文件的只读和隐藏属性

void CXXXXDlg::OnBnClickedBtnSetattr()
{
	// TODO: 在此添加控件通知处理程序代码
	UpdateData();
	if(m_filepath == "")
	{
		MessageBox("请先选择文件","错误",MB_OK);
		return;
	}
	DWORD FileAttr = GetFileAttributes(m_filepath); //获取文件默认属性
	if(INVALID_FILE_ATTRIBUTES == FileAttr )
	{//获取属性失败(文件不存在)
		MessageBox("获取文件信息失败!","错误",MB_OK);
		return;
	}
	else
	{
		if(m_IsReadOnly)
		{//若选择了checkbox的只读则追加只读属性
			SetFileAttributes(m_filepath,FileAttr |  FILE_ATTRIBUTE_READONLY); //和原来的属性按位与
		}
		if(m_IsHidden)
		{//若选择了checkbox的隐藏则追加隐藏属性
			SetFileAttributes(m_filepath,FileAttr | FILE_ATTRIBUTE_HIDDEN);
		}
	    CTime t = CTime::GetCurrentTime();//获得当前系统时间
		CString strTime =t.Format("%A, %B %d, %Y,%H:%M:%S");//格式化得到的时间
		MessageBox("设置文件属性成功!",strTime,MB_OK);
	}
}



四,文件时间自定义

void Cxiao7_2Dlg::OnBnClickedBtnModify()
{
	// TODO: 在此添加控件通知处理程序代码
	UpdateData(true);
	SYSTEMTIME CreateTime,ModifyTime;
	m_CreateTime.GetTime(&CreateTime);//从界面DateTimePicker控件接受用户选选择的时间
	m_ModifyTime.GetTime(&ModifyTime);
	if(m_filepath != "")
	{
		FILETIME fCreateTime,fModifyTime;
		//系统时间转换为文件时间,注意:只能转换为文件时间才能设置其时间
		SystemTimeToFileTime(&CreateTime,&fCreateTime);
		SystemTimeToFileTime(&CreateTime,&fModifyTime);
		//创建CFile对象,CFile是MFC封装好的类,用SDK的同学注意一下
		CFile file(m_filepath,CFile::modeWrite);
		//设置文件时间,四个参数:文件句柄,创建时间,最后访问时间,最后修改时间
		SetFileTime(file,&fCreateTime,NULL,&fModifyTime);
		MessageBox("修改文件时间成功!","提示",MB_OK);
	}
	else
	{
		MessageBox("请先选择文件","错误",MB_OK);
	}
}



注意此处设置的时间比实际要提前一天



源代码:


http://download.csdn.net/detail/eldn__/4920173




你可能感兴趣的:(VC ++实现 对文件的 隐藏, 只读 ,创建时间 , 最后修改时间 ,最后访问时间 属性的修改)