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) 函数实现剪切文件夹的操作 ② 需要检测目标文件夹是否存在,如果存在还要检测目标目录中是否存在同名文件夹,如果不存在则剪切 ...
随机推荐
- POJ1984 Navigation Nightmare —— 种类并查集
题目链接:http://poj.org/problem?id=1984 Navigation Nightmare Time Limit: 2000MS Memory Limit: 30000K T ...
- mac下安装eclipse+CDT
测试文件test.cpp #include <iostream>using namespace std; int main() { cout << "!!!He ...
- codeforces 688D D. Remainders Game(中国剩余定理)
题目链接: D. Remainders Game time limit per test 1 second memory limit per test 256 megabytes input stan ...
- 并不对劲的bzoj4652:loj2085:uoj221:p1587:[NOI2016]循环之美
题目大意 对于已知的十进制数\(n\)和\(m\),在\(k\)进制下,有多少个数值上互不相等的纯循环小数,可以用\(x/y\)表示,其中 \(1\leq x\leq n,1\leq y\leq m\ ...
- 并不对劲的bzoj3214:p3333:[ZJOI2013]丽洁体
题目大意 有三个由若干个单词组成的字符串\(T,A,B,C(|T|,|A|,|B|,|C|\leq 5*10^4,单词长度\leq5,每个单词出现次数\leq500)\) 求从\(T\)中至少删去多少 ...
- 博弈论中的SG函数
SG函数的定义: g(x) = mex ( sg(y) |y是x的后继结点 ) 其中mex(x)(x是一个自然是集合)函数是x关于自然数集合的补集中的最小值,比如x={0,1,2,4,6} 则mex( ...
- hdu 5289(单调队列)
Assignment Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total ...
- 从0开始学习Hadoop(2) 环境准备-Win7主机与Ubuntu虚拟机共享文件夹设置
主机要跟虚拟机共享文件夹设置有很多种办法,这里提供一种本地用户的方式 1. 新增一个本地用户,密码等其他设置如下 2.选择文件目录,这是共享属性 Ubuntu端设置: 文件夹->连接到网络-&g ...
- bzoj 4555: [Tjoi2016&Heoi2016]求和【NTT】
暴力推式子推诚卷积形式,但是看好多blog说多项式求逆不知道是啥.. \[ \sum_{i=0}^{n}\sum_{j=0}^{n}S(i,j)*2^j*j! \] \[ S(i,j)=\frac{1 ...
- bzoj 2508: 简单题【拉格朗日乘数法】
大概是对于f(x,y)求min,先把x看成常数,然后得到关于y的一元二次方程,然后取一元二次极值把y用x表示,再把x作为未知数带回去化简,最后能得到一个一元二次的式子,每次修改这个式子的参数即可. 智 ...