C++ 扫描当前路径下文件并删除大文件

C++ 扫描当前路径下文件并删除大文件

  • C++获取当前路径
  • 扫描文件路径下规定后缀名称的文件
  • 计算文件大小

1. 获取当前路径

  • 使用<Windows.h>中的GetCurrentDirectory方法实现,单独编写验证程序如下:
#include<iostream>
#include<Windows.h>
using namespace std;
int main(void) 
{char  buf[1000];GetCurrentDirectory(1000, buf);cout << buf << endl;system("pause");return 0;
}
  • 函数说明:
DWORD GetCurrentDirectory([in]  DWORD  nBufferLength,[out] LPTSTR lpBuffer
);-----------++++----------
参数说明:
[in] nBufferLength:存储目录字符串的缓冲区长度,以TCHARs为单位,需要包括终止字符NULL的空间
[out] lpBuffer:指针,指向一块缓冲区,用于接收结果(当前目录绝对路径)字符串,以NULL为结尾。返回值
执行成功:返回写入缓冲区的字符数(不包括终止null);
执行失败:返回值为0;缓冲区不够大时将返回指定缓冲区所需大小,以字符为单位(包括终止null)。
故可以通过GetCurrentDirectory(0, NULL);获取缓冲区所需大小,再进行缓冲区初始化完成创建。
  • VS调试报错解决方法:
使用 Visual Studio 2019 编译器,出现报错"char *"类型的实参与"LPWSTR"类型的形参不兼容。---> 解决:
配置解决方案的属性,在(配置属性->高级->高级属性)中找到字符集,将其更改为使用多字节字符集。

在这里插入图片描述

2. 文件扫描

  • 按照规定后缀名称扫描文件夹,得到规定后缀名的文件列表
//获取特定格式的文件名
/*获取特定格式的文件名
该函数有两个参数,第一个为路径字符串(string类型,最好为绝对路径);
第二个参数为文件夹与文件名称存储变量(vector类型,引用传递)。
第三个直接使用".bmp、.txt、.log"即可
*/
void GetAllFormatFiles(string path, vector<string>& files, string format)
{//文件句柄  intptr_t   hFile = 0;//文件信息  struct _finddata_t fileinfo;string p;if ((hFile = _findfirst(p.assign(path).append("\\*" + format).c_str(), &fileinfo)) != -1){do{if ((fileinfo.attrib & _A_SUBDIR)){if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0){GetAllFormatFiles(p.assign(path).append("\\").append(fileinfo.name), files, format);}}else{files.push_back(p.assign(path).append("\\").append(fileinfo.name));}} while (_findnext(hFile, &fileinfo) == 0);_findclose(hFile);}
}

3. 获取文件大小

  • 直接读取文件的物理内存
  • 两种方法示例如下:
// 通过stat结构体 获得文件大小,单位字节
size_t getFileSize(const char* fileName) {if (fileName == NULL) {return 0;}// 这是一个存储文件(夹)信息的结构体,其中有文件大小和创建时间、访问时间、修改时间等struct stat statbuf;// 提供文件名字符串,获得文件属性结构体stat(fileName, &statbuf);// 获取文件大小size_t filesize = statbuf.st_size;return filesize;
}//获取当前文件的大小
long long GetFileSize(string& strPath)
{std::ifstream  read_file_(strPath.c_str(), ios::binary);long long fileSize = 0;if (read_file_.is_open()){read_file_.seekg(0, ios_base::end);//移动到文件尾istream::pos_type file_size = read_file_.tellg();//取得当前位置的指针长度->即文件长度read_file_.seekg(0, ios_base::beg);//移动到原来的位置return  (long long)file_size;}return 0;
}

4. 完整应用例程

#include <string>
#include <vector>
#include <io.h>
#include <iostream>
#include <fstream>
#include<Windows.h>
using namespace std;#include"LogM.h"// 通过stat结构体 获得文件大小,单位字节
size_t getFileSize(const char* fileName) {if (fileName == NULL) {return 0;}// 这是一个存储文件(夹)信息的结构体,其中有文件大小和创建时间、访问时间、修改时间等struct stat statbuf;// 提供文件名字符串,获得文件属性结构体stat(fileName, &statbuf);// 获取文件大小size_t filesize = statbuf.st_size;return filesize;
}//获取当前文件的大小
long long GetFileSize(string& strPath)
{std::ifstream  read_file_(strPath.c_str(), ios::binary);long long fileSize = 0;if (read_file_.is_open()){read_file_.seekg(0, ios_base::end);//移动到文件尾istream::pos_type file_size = read_file_.tellg();//取得当前位置的指针长度->即文件长度read_file_.seekg(0, ios_base::beg);//移动到原来的位置return  (long long)file_size;}return 0;
}//获取特定格式的文件名
void GetAllFormatFiles(string path, vector<string>& files, string format)
{//文件句柄  intptr_t   hFile = 0;//文件信息  struct _finddata_t fileinfo;string p;if ((hFile = _findfirst(p.assign(path).append("\\*" + format).c_str(), &fileinfo)) != -1){do{if ((fileinfo.attrib & _A_SUBDIR)){if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0){GetAllFormatFiles(p.assign(path).append("\\").append(fileinfo.name), files, format);}}else{files.push_back(p.assign(path).append("\\").append(fileinfo.name));}} while (_findnext(hFile, &fileinfo) == 0);_findclose(hFile);}
}int main()
{
#if 1char buf[1000];GetCurrentDirectory(1000, buf);std::cout << "当前路径:" << buf << std::endl;string filePath = "E:\\VS2019\\test_demo\\test_demo";vector<string> files;//读取所有格式为jpg的文件string format = ".log";GetAllFormatFiles(filePath, files, format);int size = files.size();for (int i = 0; i < size; i++){cout << files[i] << endl;std::cout << "file's size1 = " << getFileSize(files[i].c_str()) << std::endl;std::cout << "file's size2 = " << GetFileSize(files[i]) << std::endl;int size = getFileSize(files[i].c_str()) * 1024;if (size > 4000){remove(files[i].c_str());}}
#elselog_.FileScan(".txt");#endifsystem("pause");return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/285852.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Kotlin零基础入门到进阶实战

教程介绍 Kotlin现在是Google官方认定Android一级开发语言&#xff0c;与Java100%互通&#xff0c;并具备诸多Java尚不支持的新特性&#xff0c;每个Android程序员必备的Kotlin课程&#xff0c;每个Java程序员都需要了解的Kotlin&#xff0c;掌握kotlin可以开发Web前端、Web后…

pytorch中tensor类型转换的几个函数

目录 IntTensor转FloatTensor FloatTensor转IntTensor Tensor类型变为python的常规类型 IntTensor转FloatTensor .float函数&#xff1a; FloatTensor转IntTensor .int函数 Tensor类型变为python的常规类型 item函数

java项目将静态资源中的文件转为浏览器可访问的http地址

新增一个类叫啥无所谓&#xff0c;主要是实现 WebMvcConfigurer 加上注解 Configuration项目启动时加入bean中 只操作addResourceHandlers这一个方法 其他都没用 文章下方附带一个简易的上传图片代码 package cn.exam.config;import org.springframework.context.annotati…

STM32学习笔记(2)- 软件keil5安装和新建工程

无人问津也好&#xff0c;技不如人也罢&#xff0c;都应静下心来&#xff0c;去做该做的事。 最近在学STM32&#xff0c;所以也开贴记录一下主要内容&#xff0c;省的过目即忘。视频教程为江科大&#xff08;改名江协科技&#xff09;&#xff0c;网站jiangxiekeji.com 软件安装…

​ 翻译 《The Old New Thing》

今天开始&#xff0c;为大家翻译微软优秀的技术专栏 The Old New Thing。 由微软高级工程师 Raymond Chen 撰写。该专栏起初是一个博客&#xff0c;后来也出版了同名书籍。专栏主要围绕 Windows 操作系统的开发和设计展开&#xff0c;涵盖了 Windows 平台的历史、技术细节、编程…

JMeter CSV 参数文件的使用方法

.在 JMeter 测试中&#xff0c;参数化是非常重要的&#xff0c;参数化允许我们模拟真实世界中的各种情况。本文我们将探讨如何在 JMeter 中使用 CSV 参数文件。 创建 CSV 文件 首先&#xff0c;我们需要创建一个逗号分隔的值&#xff08;CSV&#xff09;文件&#xff0c;其中…

http和socks5代理哪个好?

HTTP代理和SOCKS5代理各有其优缺点&#xff0c;但就隐蔽性而言&#xff0c;SOCKS5代理通常比HTTP代理更隐蔽。以下是它们的比较&#xff1a; HTTP代理&#xff1a; 透明性较高&#xff1a;HTTP代理在HTTP头中会透露原始客户端的IP地址&#xff0c;这使得它相对不太隐蔽。…

uni-app纵向步骤条

分享一下项目中自封装的步骤条&#xff0c;存个档~ 1. 话不多说&#xff0c;先看效果 2. 话还不多说&#xff0c;上代码 <template><!-- 获取一个数组&#xff0c;结构为[{nodeName:"流程发起"isAudit:falsetime:"2024-02-04 14:27:35"otherDat…

【Flink】Flink 处理函数之基本处理函数(一)

1. 处理函数介绍 流处理API&#xff0c;无论是基本的转换、聚合、还是复杂的窗口操作&#xff0c;都是基于DataStream进行转换的&#xff0c;所以统称为DataStreamAPI&#xff0c;这是Flink编程的核心。 但其实Flink为了更强大的表现力和易用性&#xff0c;Flink本身提供了多…

Qt程序可执行文件打包

目录 一、新建一个目录二、命令行2.1 添加临时变量2.2 打包命令 三、添加动态库四、普通 Qt 项目打包 Qml 项目打包 笔者写的python程序打包地址&#xff08;https://blog.csdn.net/qq_43700779/article/details/136994813&#xff09; 一、新建一个目录 新目录(例如test)用以…

Vue.js前端开发零基础教学(三)

目录 2.6 计算属性 2.7侦听器 2.8 样式绑定 2.8.1 绑定class属性 2.8.2 绑定style属性 2.9 阶段案例——学习计划表 2.6 计算属性 概念&#xff1a;Vue提供了计算属性来描述依赖响应式数据的复杂逻辑。 计算属性可以实时监听数据的变化&#xff0c;返回一个计算…

真假“长文本”,国产大模型混战

文&#xff5c;郝 鑫 Kimi有多火爆&#xff1f;凭一己之力搅乱A股和大模型圈。 Kimi概念股连日引爆资本市场&#xff0c;多个概念股随之涨停。在一片看好的态势中&#xff0c;谁都想来沾个边&#xff0c;据光锥智能不完全统计&#xff0c;目前&#xff0c;至少有包括读客…

【蓝桥杯知识点】浮点数二分(开n次方根再也不会超时啦!)

今天继续学习基础算法&#xff01;这篇文章介绍了二分的另一种应用——浮点数二分&#xff0c;可以用于开n次方根的计算&#xff0c;会使时间大大缩短&#xff01;我偷偷问过电脑编译器了&#xff0c;它说它喜欢优化过的算法哈哈哈哈~相信你也会喜欢的&#xff01; PS&#xff…

现代化应用部署工具-Docker

Docker 简介 什么是Docker Docker 是一个开源的应用容器引擎&#xff0c;可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中&#xff0c;然后发布到任何流行的 Linux 机器上。 Docker部署的优势 通过使用Docker等容器技术&#xff0c;可以将应用程序及其依赖项…

构建品牌故事:Kompas.ai在叙事营销中的应用

引言 在数字化和全球化的浪潮中&#xff0c;品牌建设已经从单一的产品竞争演变为品牌故事的较量。叙事营销&#xff0c;作为一种通过讲述故事来传递品牌价值和理念的策略&#xff0c;已经成为连接品牌与消费者情感的桥梁。本文将深入探讨叙事营销的重要性&#xff0c;详细介绍K…

路由 (hash模式和history模式)

首先我们了解一下资源请求&#xff1a; 1.什么是资源 在浏览器需要某一个数据或文件进行解析或者浏览器在解析某个脚本的时候需要数据进行DOM渲染等工作&#xff0c;那么这个数据或文件就是浏览器的资源 2.资源怎么获取 浏览器的资源都必须通过资源请求的方式或从缓存中调出…

【Java程序设计】【C00371】基于(JavaWeb)Springboot的社区防疫物资申报系统(有论文)

TOC 博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;已经做了六年的毕业设计程序开发&#xff0c;开发过上千套毕业设计程序&#xff0c;博客中有上百套程序可供参考&#xff0c;欢迎共同交流学习。 项目简介 项目获取 &#x1f345;文末点击卡片…

MapReduce配置和Yarn的集群部署

一、集群环境&#xff0c;还是如下三台服务器 192.168.32.101 node1192.168.32.102 node2192.168.32.103 node3 二、YARN架构 YARN&#xff0c;主从架构&#xff0c;有2个角色 主&#xff08;Master&#xff09;角色&#xff1a;ResourceManager从&#xff08;Slave&#x…

政安晨:【深度学习实践】【使用 TensorFlow 和 Keras 为结构化数据构建和训练神经网络】(三)—— 随机梯度下降

政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏: TensorFlow与Keras实战演绎 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff01; 这篇文章中&#xff0c;咱们将使用Keras和TensorFlow…

看似简单的SQL,实则就是简单

加班遇到一个SQL问题&#xff0c;本想把别人的SQL改下成SparkSQL&#xff0c;在YARN上运行&#xff0c;然而数据一直对不上。 原SQL ⚠️说明&#xff1a;a.id&#xff0c;b.id没有空的&#xff0c;数据1:1&#xff0c;b.name可能存在空的 select a.id,b.id,b.name from tab…