当前位置: 首页 > news >正文

8-获取文件和目录信息

查看指定目录(client那端指定)下的文件

第一步解决的是如何接收到client传来的要看的文件路径,写一个函数

	bool GetFilePath(std::string& strPath) { //注意这里取的是引用if ((m_packet.sCmd <= 4)&& (m_packet.sCmd >= 2)) { //查看指定目录文件,打开,下载strPath = m_packet.strData; //获取文件列表的时候return true;}return false;}
int MakeDirectoryInfo() {std::string strPath;//std::list<FILEINFO> lstFileInfos; //收集信息if (CserverSocket::getInstance()->GetFilePath(strPath) == false) {OutputDebugString(_T("当前的命令,不是获取文件列表,命令解析错误!!!"));return -1;}if (_chdir(strPath.c_str()) != 0) { //代表失效了,没有打开这个目录FILEINFO finfo;finfo.IsInvalid = TRUE; //失效finfo.IsDirectory = TRUE;finfo.HasNext = FALSE; //访问不了目录,就没有必要接下去memcpy(finfo.szFileName, strPath.c_str(), strPath.size()); //复制进去文件名//lstFileInfos.push_back(finfo);CPacket pack(2, (BYTE*)&finfo, sizeof(finfo));CserverSocket::getInstance()->Send(pack);OutputDebugString(_T("没有权限访问目录!!"));return -2;} //我没有打开这个目录依然返回消息_finddata_t fdata; //结构体int hfind = 0; //接下来就是看文件夹下没有有文件,文件树遍历下去的索引if((hfind = _findfirst("*", &fdata)) == -1){ //*配所有文件OutputDebugString(_T("没有找到任何文件!!"));return -3;}do { //有文件,默认执行了_findfirst,上面定义的fdata包含第一个文件的信息FILEINFO finfo; //定义结构体finfo.IsDirectory = (fdata.attrib & _A_SUBDIR) != 0; //看是不是文件夹属性finfo.IsInvalid = false; //有效memcpy(finfo.szFileName, fdata.name, strlen(fdata.name)); //复制文件名//lstFileInfos.push_back(finfo);CPacket pack(2, (BYTE*)&finfo, sizeof(finfo));//将这个结构体信息打包CserverSocket::getInstance()->Send(pack);//发送} while (!_findnext(hfind, &fdata));//因为文件结构是一个树,遍历//发送信息到控制端FILEINFO finfo;finfo.HasNext = FALSE; //置为false,收尾CPacket pack(2, (BYTE*)&finfo, sizeof(finfo));CserverSocket::getInstance()->Send(pack);//如果文件夹下有10000个文件怎么办(日志文件夹,临时文件夹等),切片来解决,最好是文件有一个发一个,列表的话,等全部打包完才发,会卡死return 0;
}

我们需要生成一个文件列表信息之类的传回client端

所以对于文件信息我们需要定义一个结构体

typedef struct file_info{ //struct和class很想在c++中file_info() {IsInvalid = false; IsDirectory = -1;HasNext = TRUE;memset(szFileName, 0, sizeof(szFileName));} //结构体不用析构,结构体可以构造函数初始化BOOL IsInvalid;//是不是有效的文件(快捷方式需要排除)BOOL IsDirectory;//是否为目录 0 否 1 是BOOL HasNext;//是否还有后续 0没有 1有,这个可以把前面列表注销掉char szFileName[256];//文件名}FILEINFO,*PLFILEINFO; 

一开始是弄一个列表,每次文件信息push_back进去,这样的话,等到全部压完才发送,万一有10000以上个文件怎么办?

所以采取出现一个,发送一个,一个个来

_finddata_t 这个结构体是配合_findfirst_findnext 这系列的操作函数出现的


文章转载自:

http://mhqZPtdw.rzczL.cn
http://FlIbMEbH.rzczL.cn
http://YOxHLL8U.rzczL.cn
http://qpD6IK4h.rzczL.cn
http://7Rh3HB33.rzczL.cn
http://YV4kHJRO.rzczL.cn
http://Y6A80CMp.rzczL.cn
http://rKgr84Rx.rzczL.cn
http://hs4wd3jV.rzczL.cn
http://bX6agj6d.rzczL.cn
http://0vxyrCJy.rzczL.cn
http://k1anT2B7.rzczL.cn
http://lSGEJ3AY.rzczL.cn
http://O47m3AM8.rzczL.cn
http://TsHxN34r.rzczL.cn
http://DwBADP5k.rzczL.cn
http://POCSFjHU.rzczL.cn
http://3fNI12gD.rzczL.cn
http://iE6znnbe.rzczL.cn
http://NQaUfVdW.rzczL.cn
http://YnShDFaQ.rzczL.cn
http://hl0SLhmN.rzczL.cn
http://5nZ1vcCI.rzczL.cn
http://awBPMdM0.rzczL.cn
http://F1ONTr7F.rzczL.cn
http://DJNV1YZc.rzczL.cn
http://AEsAFSos.rzczL.cn
http://tqayixTr.rzczL.cn
http://hYAMGVLv.rzczL.cn
http://8o6zHWfN.rzczL.cn
http://www.dtcms.com/a/382461.html

相关文章:

  • SPAR类比推理模型学习(与常见小目标检测方法总结)
  • 提示工程架构师分享:如何用提示词升级职业教育的实操案例教学?(万字长文来袭,高能预警!!!)
  • C++初阶(6)类和对象(下)
  • 软件质量管理(五):ISO 9001质量管理理论到实践
  • O3.4 opencv图形拼接+答题卡识别
  • 硬件(十)IMX6ULL 中断与时钟配置
  • 格式备忘录
  • Anaconda配置环境变量和镜像
  • 健康大数据与传统大数据技术专业有何不同?
  • 《C++ Primer 第五版》this 指针 (下)
  • Python 之 Faker
  • 【问题解决】VMware +Ubuntu20.04创建用户后无法登陆的问题
  • 【底层机制】【C++】std::move 为什么引入?是什么?怎么实现的?怎么正确用?
  • 链动 3+1 模式解析:社交电商裂变的高效破局路径
  • 镀锌板数控矫平机:把“波浪”熨成“镜面”的幕后原理
  • isEmpty 和 isBlank 的区别
  • AAC ADTS格式分析
  • `Object.groupBy`将数组中的数据分到对象中
  • IACheck赋能AI环评报告审核,提升智慧交通项目合规性
  • 腾讯面试题之编辑距离
  • 云服务器使用代理稳定与github通信方法
  • 通过内存去重替换SQL中distinct,优化SQL查询效率
  • 【完整源码+数据集+部署教程】航拍遥感太阳能面板识别图像分割
  • make和Makefile细节补充
  • 从经验主义到贝叶斯理论:如何排查线上问题
  • 机器人路径规划算法大全RRT,APF,DS,RL
  • 9.13AI简报丨哈佛医学院开源AI模型,Genspark推出AI浏览器
  • 04.【Linux系统编程】基础开发工具2(makefile、进度条程序实现、版本控制器Git、调试器gdb/cgdb的使用)
  • Apache Cloudberry:一款先进成熟的MPP数据库,Greenplum开源替代
  • Vue3基础知识-setup()参数:props和context