设为首页 加入收藏

TOP

VC笔记 (一)
2014-11-23 19:09:42 】 浏览:776
Tags:笔记

VC++(MFC)读取共享文件夹下子目录信息,并显示在listctrl控件中
为了实现文件传输功能,特整理了一下有关读取指定文件下其子目录信息的读取方法,及添加双击事件循环读取下一层信息的功能。
一、变量的定义:
#define MAX_COUNT 1024
#define MAX_PATH 256
struct OLDPATH
{
char m_oldpath[MAX_PATH];
};


OLDPATH oldpath[10]; //记录上一层文件读取的路径
char m_flpath[MAX_PATH]; //记录当前文件读取的路径


CButton m_FileBack;//声明返回上一层控件对象
CListCtrl m_filelist; //声明listctrl控件对象
int m_count[MAX_COUNT]; //用来记录共享文件夹下子文件夹在listctrl控件中显示的行号
int layernum; //用来记录查询的是第几层
二、具体实现:
1、初始化:
for (int i=0;i {
m_count[i]=-1;
}
layernum=0;
//初始化listctrl控件
m_filelist.InsertColumn(0,"名称");
m_filelist.InsertColumn(1,"大小");
CRect rect;
m_filelist.GetClientRect(&rect);
m_filelist.SetColumnWidth(0,rect.Width()/3);
m_filelist.SetColumnWidth(1,rect.Width()/3);
//获取当前目录的路径
char* des;
des=new char[256];
memset(des,0,256);
GetCurrentDirectory(256,des);
strcat(des,"\\共享文件夹"); //des存储的是你需要读取的文件夹的路径,根据自己的要求进行修改
2、定义查询函数find(char* lpPath)
void CFileScan::find(char *lpPath)
{
int i=0;
m_filelist.DeleteAllItems(); //每次查询前清除上次查询显示在listctrl中的结果
char szFind[MAX_PATH];
WIN32_FIND_DATA FindFileData;


strcpy(szFind,lpPath);
strcpy(oldpath[layernum].m_oldpath,szFind); 用oldpath记录第几(layernum)层的文件夹的路径
strcpy(m_flpath,szFind); //用m_flpath记录当前文件夹的路径
strcat(szFind,"\\*.*");
HANDLE hFind=::FindFirstFile(szFind,&FindFileData);
if(INVALID_HANDLE_VALUE == hFind) return;

while(TRUE)
{
if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
if(FindFileData.cFileName[0]!='.')//查询出的子文件夹信息
{
CString fileName;
fileName=FindFileData.cFileName;
m_filelist.InsertItem(i,fileName) ;
m_count[i]=i; //记录是listctrl中的第几行
i++;
}
}
else //查询出的子文件信息
{
CString fileName,fileSizeh,fileSizelow,str,fileSize;
DWORD HfileSize,LfileSize;
HfileSize=FindFileData.nFileSizeHigh; //记录文件大小的高32位
LfileSize=FindFileData.nFileSizeLow; //记录文件大小的低32位
fileSizeh.Format("%d",HfileSize);
fileSizelow.Format("%d",LfileSize);
str=fileSizeh;
str+=fileSizelow;
fileSize.Format("%db",atoi(str)); //文件大小****b
// AfxMessageBox(fileSize);
//将文件名和大小显示在listctrl控件中
fileName=FindFileData.cFileName;
m_filelist.InsertItem(i,fileName);
m_filelist.SetItemText(i,1,fileSize);
i++;
}
if(!FindNextFile(hFind,&FindFileData)) break;
}
FindClose(hFind);
layernum++; //记录查询的是第几层
}
3、定义listctrl控件下的左键双击消息:
afx_msg void OnDblclkList1(NMHDR* pNMHDR, LRESULT* pResult); //消息
ON_NOTIFY(NM_DBLCLK, IDC_LIST1, OnDblclkList1)
实现:
void CFileScan::OnDblclkList1(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
POSITION pos=m_filelist.GetFirstSelectedItemPosition();
int nItem=m_filelist.GetNextSelectedItem(pos); //获取双击的行号,从0开始计算
CString listname;
listname=m_filelist.GetItemText(nItem,0); //得到选中行的文件名
char szFile[M

首页 上一页 1 2 3 4 5 下一页 尾页 1/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇VC++ 树的孩子兄弟表示法 下一篇窗口滚动条与滚动条控件的区别

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目