MFC_简易文件管理器
练习_简易文件管理器
Edit1编辑框绑定变量,初始化内容
m_EditCtrl = L"D:\";

添加List控件,属性设置report,OnInitDialog()函数里添加信息
// 初始化函数
BOOL CFileManagerDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// 初始化列表控件的风格
m_ListCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
// 初始化列表控件的列选项
m_ListCtrl.InsertColumn(, L"文件名", LVCFMT_CENTER, );
m_ListCtrl.InsertColumn(, L"修改时间", LVCFMT_CENTER, );
m_ListCtrl.InsertColumn(, L"类型", LVCFMT_CENTER, );
m_ListCtrl.InsertColumn(, L"大小", LVCFMT_CENTER, );
// 默认遍历 D 盘的内容
GetFileInfo(m_EditCtrl);
return ;
}
上面用到的相关函数

// 获取文件夹下的所有文件和目录
void CFileManagerDlg::GetFileInfo(CString FilePath)
{
// 1. 清空列表中已存在的数据
m_ListCtrl.DeleteAllItems();
// 2. 定义需要的数据
WIN32_FIND_DATA FileInfo = { };
// 3. 拼接路径为 D:\\* = FilePath + L"\\*"; 并且获取第一个文件
HANDLE FindHanlde = FindFirstFile(FilePath + L"\\*", &FileInfo);
// 4. 判断文件是否获取成功,并继续遍历
if (INVALID_HANDLE_VALUE != FindHanlde)
{
do {
// 5. 添加数据到列表中时,排除 . 目录
if (_tcscmp(FileInfo.cFileName, L"."))
{
// 6. 向列表内添加数据
InsetFileInfo(FileInfo);
}
// 7. 遍历下一个文件
} while (FindNextFile(FindHanlde, &FileInfo));
}
}
// 向列表中添加数据
void CFileManagerDlg::InsetFileInfo(WIN32_FIND_DATA& FileInfo)
{
CString TempString;
// 0. 获取当前列表最后一个位置
int Count = m_ListCtrl.GetItemCount();
// 1. 在列表中添加一行名称
m_ListCtrl.InsertItem(Count, FileInfo.cFileName);
// 2. 添加修改时间
FILETIME LocalFileTime = { };
FileTimeToLocalFileTime(&FileInfo.ftLastWriteTime, &LocalFileTime);
SYSTEMTIME SystemTime = { };
FileTimeToSystemTime(&LocalFileTime, &SystemTime);
TempString.Format(L"%d/%d/%d/%d:%d:%d", SystemTime.wYear, SystemTime.wMonth,
SystemTime.wDay, SystemTime.wHour, SystemTime.wMinute, SystemTime.wSecond);
m_ListCtrl.SetItemText(Count, , TempString);
// 3. 添加类型,属性
TempString = L"";
if (FileInfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
TempString += L"目录 ";
else
TempString += L"文件 ";
if (FileInfo.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN)
TempString += L"隐藏 ";
m_ListCtrl.SetItemText(Count, , TempString);
// 4. 根据类型进行大小的计算
if (FileInfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
m_ListCtrl.SetItemText(Count, , L"-");
else
{
TempString.Format(L"%.2lf MB", FileInfo.nFileSizeLow / 1024.0 / 1024.0);
m_ListCtrl.SetItemText(Count, , TempString);
}
}
选择文件左键双击进入下个文件
// 左键双击的点击
void CFileManagerDlg::OnDblclkList1(NMHDR* pNMHDR, LRESULT* pResult)
{
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR); // 获取当前的路径,保存编辑框中
UpdateData(TRUE);
// 1. 拼接点击的到的文件或目录对应的全路径
CString FilePath = m_EditCtrl + L"\\" +
m_ListCtrl.GetItemText(pNMItemActivate->iItem, );
// 2. 判断是不是一个目录
if (GetFileAttributes(FilePath) & FILE_ATTRIBUTE_DIRECTORY)
{
// 3. 如果是目录就继续遍历
GetFileInfo(FilePath);
// 4. 更新当前所在的路径
WCHAR * Name = nullptr;
GetFullPathName(FilePath.GetBuffer(), MAX_PATH,
m_EditCtrl.GetBuffer(MAX_PATH), &Name);
UpdateData(FALSE);
}
*pResult = ;
}
在文件上右键弹出文件相关信息
void CFileManagerDlg::OnRclickList1(NMHDR* pNMHDR, LRESULT* pResult)
{
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
// 拼接路径并传入到构造函数中
UpdateData(TRUE); //////////////////////////////////////////////////////////
CString FilePath = m_EditCtrl + L"\\" + m_ListCtrl.GetItemText(pNMItemActivate->iItem, );
//////////////////////////////////////////////////////////
// 弹出对话框
CMyFileDialog Dialog(FilePath);
Dialog.DoModal();
*pResult = ;
}
弹出窗口构造函数重载
CMyFileDialog::CMyFileDialog(CString FileName, CWnd* pParent /*=nullptr*/)
: CDialogEx(IDD_FILEDIALOG, pParent)
{
GetFullPathName(FileName.GetBuffer(), MAX_PATH,
m_FileName.GetBuffer(MAX_PATH), &Name);
}
弹出窗口初始化
// 初始化对话框,显示数据
BOOL CMyFileDialog::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 创建结构体用于保存文件内容
SHFILEINFO FileInfo = { };
// 获取类型
SHGetFileInfo(m_FileName, , &FileInfo, sizeof(SHFILEINFO), SHGFI_TYPENAME);
SetDlgItemText(IDC_EDIT2, FileInfo.szTypeName);
// 获取图标
SHGetFileInfo(m_FileName, , &FileInfo, sizeof(SHFILEINFO), SHGFI_ICON);
SendDlgItemMessage(IDC_STATIC1, STM_SETICON, (WPARAM)FileInfo.hIcon, NULL);
// 输出名字
SetDlgItemText(IDC_EDIT1, Name);
// 设置对话框内的属性
int attr = GetFileAttributes(m_FileName);
if (attr & FILE_ATTRIBUTE_HIDDEN)
SendDlgItemMessage(IDC_CHECK2, BM_SETCHECK, BST_CHECKED);
if (attr & FILE_ATTRIBUTE_READONLY)
SendDlgItemMessage(IDC_CHECK1, BM_SETCHECK, BST_CHECKED);
return TRUE;
}
弹出窗口确认按钮更改复选框对应的属性应用到文件夹上
// 应用设置
void CMyFileDialog::OnBnClickedButton2()
{
// 获取默认的属性
int attr = GetFileAttributes(m_FileName);
if (SendDlgItemMessage(IDC_CHECK2, BM_GETCHECK) == BST_CHECKED)
attr |= FILE_ATTRIBUTE_HIDDEN;
else
attr &= ~FILE_ATTRIBUTE_HIDDEN;
if (SendDlgItemMessage(IDC_CHECK1, BM_GETCHECK) == BST_CHECKED)
attr |= FILE_ATTRIBUTE_READONLY;
else
attr &= ~FILE_ATTRIBUTE_READONLY;
// 设置修改后的属性
SetFileAttributes(m_FileName, attr); CDialogEx::OnOK();
}
知识点
_tcscmp应用
// 5. 添加数据到列表中时,排除 . 目录
if (_tcscmp(FileInfo.cFileName, L"."))
{
// 6. 向列表内添加数据
InsetFileInfo(FileInfo);
}
GetFullPathName 消除重复的路径
GetFullPathName(FilePath.GetBuffer(), MAX_PATH,
m_EditCtrl.GetBuffer(MAX_PATH), &Name);
SHFILEINFO 结构体
// 创建结构体用于保存文件内容
SHFILEINFO FileInfo = { 0 }; // 获取类型
SHGetFileInfo(m_FileName, 0, &FileInfo, sizeof(SHFILEINFO), SHGFI_TYPENAME);
SetDlgItemText(IDC_EDIT2, FileInfo.szTypeName);
MFC_简易文件管理器的更多相关文章
- C#编写一个简易的文件管理器
编写一个简易的文件管理器,通过本次实验,练习 TreeView.ListView 和SplitContainer 控件的使用,同时熟悉 C#文件系统的操作方法以及 File 类和 Directory类 ...
- C语言基于GTK+Libvlc实现的简易视频播放器(二)
简易视频播放器-全屏播放 一.课程说明 上一次我们使用gtk+libvlc实现了一个最简单的视频播放器,可以实现点击按钮暂定和停止播放视频,以及同步显 示视频播放进度,但即使作为一个视频播放器,只有这 ...
- C语言基于GTK+Libvlc实现的简易视频播放器
小编心语:现下,各种视频播放软件层出不穷,竞争也越演越烈,不知道大家有木有这个想法,小编有时在想能不能做一款属于自己的视频播放器呢~小编特意去实验楼,整理出了这篇关于如何实现简易视频播放器的博文.简易 ...
- 【原】iOS学习之文件管理器(NSFileManager)和文件对接器(NSFileHandle)
1.文件管理器(NSFileManager) 1> 主要作用及功能方法 主要作用:此类主要是对文件进行的操作(创建/删除/改名等)以及文件信息的获取. 功能方法: 2> 创建文件夹 创建所 ...
- 使用Windows Form 制作一个简易资源管理器
自制一个简易资源管理器----TreeView控件 第一步.新建project,进行基本设置:(Set as StartUp Project:View/Toolbox/TreeView) 第二步.开始 ...
- atitit. web 在线文件管理器最佳实践(1)--- elFinder 的使用流程解决之道 。打开浏览服务器文件夹java .net php
atitit. web 在线文件管理器最佳实践(1)--- elFinder 的使用流程解决之道 .打开浏览服务器文件夹java .net php 1. 环境:::项目java web,需要打开浏览服 ...
- Web 在线文件管理器学习笔记与总结(19)上传文件
dir.func.php 中添加方法: /* 上传文件 */ function uploadFile($fileInfo,$path,$allowExt = array('jpg','jpeg','p ...
- Web 在线文件管理器学习笔记与总结(17)复制文件 (18)剪切文件
(17)复制文件 ① 复制文件通过copy($src,$dst) 来实现 ② 检测目标目录是否存在,如果存在则继续检测目标目录中是否存在同名文件,如果不存在则复制成功 file.func.php 中添 ...
- Web 在线文件管理器学习笔记与总结(15)剪切文件夹 (16)删除文件夹
(15)剪切文件夹 ① 通过rename($oldname,$newname) 函数实现剪切文件夹的操作 ② 需要检测目标文件夹是否存在,如果存在还要检测目标目录中是否存在同名文件夹,如果不存在则剪切 ...
随机推荐
- HDU4642博弈好题
链接:http://acm.hdu.edu.cn/ 两个人进行翻棋游戏,若a[n][m]为1,则不管先手就可以翻a[n][m]使其为0,这样不管后手翻什么都会使得a[n][m]为1,先手总是有棋可翻: ...
- hdu5335(搜索)
Walk Out Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Su ...
- jsp 中href链接有前缀
在jsp页面中,如果有一个链接写为:“href="www.hqvolunteer.org"”(链接到的是外网),这样发布项目了后,把鼠标移到上面显示的是:你的项目路径/www.hq ...
- MySQL基础操作——转
原文: [培训]MySQL yum安装mysql:yum -y install mysql*- 或者 yum -y install mysql* 启动数据库服务:/etc/init.d/mysqld ...
- ASP.NET Core MVC 打造一个简单的图书馆管理系统 (修正版)(一) 基本模型以及数据库的建立
前言: 本系列文章主要为我之前所学知识的一次微小的实践,以我学校图书馆管理系统为雏形所作. 本系列文章主要参考资料: 微软文档:https://docs.microsoft.com/zh-cn/asp ...
- E20180324-hm
popover 弹出框 archive v. 存档; n. 档案文件; 档案室;
- 【WIP】Swift4 异常处理, JSON处理
创建: 2018/03/24 更新: 2018/06/05 补充catch可以只带where不带模式 [任务表]TODO 异常处理语法 异常的发生 抛出例外 thorw 式 ● 抛出的值的类型必须采 ...
- Swift4 类与继承, 类型转换, 类型判断
创建: 2018/03/05 完成: 2018/03/07 更新: 2018/03/09 完善标题 [Swift4 类与继承, 类型转换] -> [Swift4 类与继承, 类型转换与判断] 补 ...
- bzoj 1306: [CQOI2009]match循环赛【dfs+剪枝】
大力剪枝,最后洛谷上还开了o2才过-- 大概这样剪枝: 1.搜索中,一个队当前得分超过要求或者一个队剩下的比赛场数全赢也达不到要求则return: 2.注意到如果平局,最总分的贡献是2,否则是3,所以 ...
- vsftpd 配置文件
# mple config file /etc/vsftpd/vsftpd.conf # # The default compiled in settings are fairly paranoid. ...