linux c++遍历文件夹下所有文件,C++ 遍历目录下文件

2023-11-07

function:遍历目录下所有文件,返回文件总数,子文件夹总数(修改一下可以获得全部文件名等)。

#include "stdlib.h"

#include "direct.h"

#include "string.h"

#include "io.h"

#include "stdio.h"

#include "iostream"

using namespace std;

class CBrowseDir

{

protected:

//存放初始目录的绝对路径,以'\'结尾

char m_szInitDir[_MAX_PATH];

public:

//缺省构造器

CBrowseDir();

//设置初始目录为dir,如果返回false,表示目录不可用

bool SetInitDir(const char *dir);

//开始遍历初始目录及其子目录下由filespec指定类型的文件

//filespec可以使用通配符 * ?,不能包含路径。

//如果返回false,表示遍历过程被用户中止

bool BeginBrowse(const char *filespec);

protected:

//遍历目录dir下由filespec指定的文件

//对于子目录,采用迭代的方法

//如果返回false,表示中止遍历文件

bool BrowseDir(const char *dir,const char *filespec);

//函数BrowseDir每找到一个文件,就调用ProcessFile

//并把文件名作为参数传递过去

//如果返回false,表示中止遍历文件

//用户可以覆写该函数,加入自己的处理代码

virtual bool ProcessFile(const char *filename);

//函数BrowseDir每进入一个目录,就调用ProcessDir

//并把正在处理的目录名及上一级目录名作为参数传递过去

//如果正在处理的是初始目录,则parentdir=NULL

//用户可以覆写该函数,加入自己的处理代码

//比如用户可以在这里统计子目录的个数

virtual void ProcessDir(const char *currentdir,const char *parentdir);

};

CBrowseDir::CBrowseDir()

{

//用当前目录初始化m_szInitDir

getcwd(m_szInitDir,_MAX_PATH);

//如果目录的最后一个字母不是'\',则在最后加上一个'\'

int len=strlen(m_szInitDir);

if (m_szInitDir[len-1] != '\\')

strcat(m_szInitDir,"\\");

}

bool CBrowseDir::SetInitDir(const char *dir)

{

//先把dir转换为绝对路径

if (_fullpath(m_szInitDir,dir,_MAX_PATH) == NULL)

return false;

//判断目录是否存在

if (_chdir(m_szInitDir) != 0)

return false;

//如果目录的最后一个字母不是'\',则在最后加上一个'\'

int len=strlen(m_szInitDir);

if (m_szInitDir[len-1] != '\\')

strcat(m_szInitDir,"\\");

return true;

}

bool CBrowseDir::BeginBrowse(const char *filespec)

{

ProcessDir(m_szInitDir,NULL);

return BrowseDir(m_szInitDir,filespec);

}

bool CBrowseDir::BrowseDir(const char *dir,const char *filespec)

{

_chdir(dir);

//首先查找dir中符合要求的文件

long hFile;

_finddata_t fileinfo;

if ((hFile=_findfirst(filespec,&fileinfo)) != -1)

{

do

{

//检查是不是目录

//如果不是,则进行处理

if (!(fileinfo.attrib & _A_SUBDIR))

{

char filename[_MAX_PATH];

strcpy(filename,dir);

strcat(filename,fileinfo.name);

cout << filename << endl;

if (!ProcessFile(filename))

return false;

}

} while (_findnext(hFile,&fileinfo) == 0);

_findclose(hFile);

}

//查找dir中的子目录

//因为在处理dir中的文件时,派生类的ProcessFile有可能改变了

//当前目录,因此还要重新设置当前目录为dir。

//执行过_findfirst后,可能系统记录下了相关信息,因此改变目录

//对_findnext没有影响。

_chdir(dir);

if ((hFile=_findfirst("*.*",&fileinfo)) != -1)

{

do

{

//检查是不是目录

//如果是,再检查是不是 . 或 ..

//如果不是,进行迭代

if ((fileinfo.attrib & _A_SUBDIR))

{

if (strcmp(fileinfo.name,".") != 0 && strcmp

(fileinfo.name,"..") != 0)

{

char subdir[_MAX_PATH];

strcpy(subdir,dir);

strcat(subdir,fileinfo.name);

strcat(subdir,"\\");

ProcessDir(subdir,dir);

if (!BrowseDir(subdir,filespec))

return false;

}

}

} while (_findnext(hFile,&fileinfo) == 0);

_findclose(hFile);

}

return true;

}

bool CBrowseDir::ProcessFile(const char *filename)

{

return true;

}

void CBrowseDir::ProcessDir(const char

*currentdir,const char *parentdir)

{

}

//从CBrowseDir派生出的子类,用来统计目录中的文件及子目录个数

class CStatDir:public CBrowseDir

{

protected:

int m_nFileCount;  //保存文件个数

int m_nSubdirCount; //保存子目录个数

public:

//缺省构造器

CStatDir()

{

//初始化数据成员m_nFileCount和m_nSubdirCount

m_nFileCount=m_nSubdirCount=0;

}

//返回文件个数

int GetFileCount()

{

return m_nFileCount;

}

//返回子目录个数

int GetSubdirCount()

{

//因为进入初始目录时,也会调用函数ProcessDir,

//所以减1后才是真正的子目录个数。

return m_nSubdirCount-1;

}

protected:

//覆写虚函数ProcessFile,每调用一次,文件个数加1

virtual bool ProcessFile(const char *filename)

{

m_nFileCount++;

return CBrowseDir::ProcessFile(filename);

}

//覆写虚函数ProcessDir,每调用一次,子目录个数加1

virtual void ProcessDir

(const char *currentdir,const char *parentdir)

{

m_nSubdirCount++;

CBrowseDir::ProcessDir(currentdir,parentdir);

}

};

void main()

{

//获取目录名

char buf[256];

printf("请输入要统计的目录名:");

gets(buf);

//构造类对象

CStatDir statdir;

//设置要遍历的目录

if (!statdir.SetInitDir(buf))

{

puts("目录不存在。");

return;

}

//开始遍历

statdir.BeginBrowse("*.*");

printf("文件总数: %d\n子目录总数:%d\n",statdir.GetFileCount(),statdir.GetSubdirCount());

}

已在Windows上验证有效。

下面我加了BeginBrowseFilenames函数,以vector形式返回目录中所有文件名。

#include "stdlib.h"

#include "direct.h"

#include "string.h"

#include "string"

#include "io.h"

#include "stdio.h"

#include

#include "iostream"

using namespace std;

class CBrowseDir

{

protected:

//存放初始目录的绝对路径,以'\'结尾

char m_szInitDir[_MAX_PATH];

public:

//缺省构造器

CBrowseDir();

//设置初始目录为dir,如果返回false,表示目录不可用

bool SetInitDir(const char *dir);

//开始遍历初始目录及其子目录下由filespec指定类型的文件

//filespec可以使用通配符 * ?,不能包含路径。

//如果返回false,表示遍历过程被用户中止

bool BeginBrowse(const char *filespec);

vector BeginBrowseFilenames(const char *filespec);

protected:

//遍历目录dir下由filespec指定的文件

//对于子目录,采用迭代的方法

//如果返回false,表示中止遍历文件

bool BrowseDir(const char *dir,const char *filespec);

vector GetDirFilenames(const char *dir,const char *filespec);

//函数BrowseDir每找到一个文件,就调用ProcessFile

//并把文件名作为参数传递过去

//如果返回false,表示中止遍历文件

//用户可以覆写该函数,加入自己的处理代码

virtual bool ProcessFile(const char *filename);

//函数BrowseDir每进入一个目录,就调用ProcessDir

//并把正在处理的目录名及上一级目录名作为参数传递过去

//如果正在处理的是初始目录,则parentdir=NULL

//用户可以覆写该函数,加入自己的处理代码

//比如用户可以在这里统计子目录的个数

virtual void ProcessDir(const char *currentdir,const char *parentdir);

};

CBrowseDir::CBrowseDir()

{

//用当前目录初始化m_szInitDir

getcwd(m_szInitDir,_MAX_PATH);

//如果目录的最后一个字母不是'\',则在最后加上一个'\'

int len=strlen(m_szInitDir);

if (m_szInitDir[len-1] != '\\')

strcat(m_szInitDir,"\\");

}

bool CBrowseDir::SetInitDir(const char *dir)

{

//先把dir转换为绝对路径

if (_fullpath(m_szInitDir,dir,_MAX_PATH) == NULL)

return false;

//判断目录是否存在

if (_chdir(m_szInitDir) != 0)

return false;

//如果目录的最后一个字母不是'\',则在最后加上一个'\'

int len=strlen(m_szInitDir);

if (m_szInitDir[len-1] != '\\')

strcat(m_szInitDir,"\\");

return true;

}

vector CBrowseDir::BeginBrowseFilenames(const char *filespec)

{

ProcessDir(m_szInitDir,NULL);

return GetDirFilenames(m_szInitDir,filespec);

}

bool CBrowseDir::BeginBrowse(const char *filespec)

{

ProcessDir(m_szInitDir,NULL);

return BrowseDir(m_szInitDir,filespec);

}

bool CBrowseDir::BrowseDir(const char *dir,const char *filespec)

{

_chdir(dir);

//首先查找dir中符合要求的文件

long hFile;

_finddata_t fileinfo;

if ((hFile=_findfirst(filespec,&fileinfo)) != -1)

{

do

{

//检查是不是目录

//如果不是,则进行处理

if (!(fileinfo.attrib & _A_SUBDIR))

{

char filename[_MAX_PATH];

strcpy(filename,dir);

strcat(filename,fileinfo.name);

cout << filename << endl;

if (!ProcessFile(filename))

return false;

}

} while (_findnext(hFile,&fileinfo) == 0);

_findclose(hFile);

}

//查找dir中的子目录

//因为在处理dir中的文件时,派生类的ProcessFile有可能改变了

//当前目录,因此还要重新设置当前目录为dir。

//执行过_findfirst后,可能系统记录下了相关信息,因此改变目录

//对_findnext没有影响。

_chdir(dir);

if ((hFile=_findfirst("*.*",&fileinfo)) != -1)

{

do

{

//检查是不是目录

//如果是,再检查是不是 . 或 ..

//如果不是,进行迭代

if ((fileinfo.attrib & _A_SUBDIR))

{

if (strcmp(fileinfo.name,".") != 0 && strcmp

(fileinfo.name,"..") != 0)

{

char subdir[_MAX_PATH];

strcpy(subdir,dir);

strcat(subdir,fileinfo.name);

strcat(subdir,"\\");

ProcessDir(subdir,dir);

if (!BrowseDir(subdir,filespec))

return false;

}

}

} while (_findnext(hFile,&fileinfo) == 0);

_findclose(hFile);

}

return true;

}

vector CBrowseDir::GetDirFilenames(const char *dir,const char *filespec)

{

_chdir(dir);

vectorfilename_vector;

filename_vector.clear();

//首先查找dir中符合要求的文件

long hFile;

_finddata_t fileinfo;

if ((hFile=_findfirst(filespec,&fileinfo)) != -1)

{

do

{

//检查是不是目录

//如果不是,则进行处理

if (!(fileinfo.attrib & _A_SUBDIR))

{

char filename[_MAX_PATH];

strcpy(filename,dir);

strcat(filename,fileinfo.name);

filename_vector.push_back(filename);

}

} while (_findnext(hFile,&fileinfo) == 0);

_findclose(hFile);

}

//查找dir中的子目录

//因为在处理dir中的文件时,派生类的ProcessFile有可能改变了

//当前目录,因此还要重新设置当前目录为dir。

//执行过_findfirst后,可能系统记录下了相关信息,因此改变目录

//对_findnext没有影响。

_chdir(dir);

if ((hFile=_findfirst("*.*",&fileinfo)) != -1)

{

do

{

//检查是不是目录

//如果是,再检查是不是 . 或 ..

//如果不是,进行迭代

if ((fileinfo.attrib & _A_SUBDIR))

{

if (strcmp(fileinfo.name,".") != 0 && strcmp

(fileinfo.name,"..") != 0)

{

char subdir[_MAX_PATH];

strcpy(subdir,dir);

strcat(subdir,fileinfo.name);

strcat(subdir,"\\");

ProcessDir(subdir,dir);

vectortmp= GetDirFilenames(subdir,filespec);

for (vector::iterator it=tmp.begin();it

{

filename_vector.push_back(*it);

}

}

}

} while (_findnext(hFile,&fileinfo) == 0);

_findclose(hFile);

}

return filename_vector;

}

bool CBrowseDir::ProcessFile(const char *filename)

{

return true;

}

void CBrowseDir::ProcessDir(const char

*currentdir,const char *parentdir)

{

}

//从CBrowseDir派生出的子类,用来统计目录中的文件及子目录个数

class CStatDir:public CBrowseDir

{

protected:

int m_nFileCount;  //保存文件个数

int m_nSubdirCount; //保存子目录个数

public:

//缺省构造器

CStatDir()

{

//初始化数据成员m_nFileCount和m_nSubdirCount

m_nFileCount=m_nSubdirCount=0;

}

//返回文件个数

int GetFileCount()

{

return m_nFileCount;

}

//返回子目录个数

int GetSubdirCount()

{

//因为进入初始目录时,也会调用函数ProcessDir,

//所以减1后才是真正的子目录个数。

return m_nSubdirCount-1;

}

protected:

//覆写虚函数ProcessFile,每调用一次,文件个数加1

virtual bool ProcessFile(const char *filename)

{

m_nFileCount++;

return CBrowseDir::ProcessFile(filename);

}

//覆写虚函数ProcessDir,每调用一次,子目录个数加1

virtual void ProcessDir

(const char *currentdir,const char *parentdir)

{

m_nSubdirCount++;

CBrowseDir::ProcessDir(currentdir,parentdir);

}

};

void main()

{

//获取目录名

char buf[256];

printf("请输入要统计的目录名:");

gets(buf);

//构造类对象

CStatDir statdir;

//设置要遍历的目录

if (!statdir.SetInitDir(buf))

{

puts("目录不存在。");

return;

}

//开始遍历

vectorfile_vec = statdir.BeginBrowseFilenames("*.*");

for(vector::const_iterator it = file_vec.begin(); it < file_vec.end(); ++it)

std::cout<

printf("文件总数: %d\n",file_vec.size());

system("pause");

}

0b1331709591d260c1c78e86d0c51c18.png

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux c++遍历文件夹下所有文件,C++ 遍历目录下文件 的相关文章

  • 微信调用jssdk全流程详解

    微信调用jssdk全流程详解 系统框架使用的是前后端分离 前端使用vant 后端是springboot 一 网页授权的时序图 二 公众号配置 1 绑定域名 登录微信公众平台进入 公众号设置 的 功能设置 里填写 JS接口安全域名 也就是这样
  • MongoDB—索引的建立与维护

    一 索引基础 MongoDB的索引几乎与传统的关系型数据库一模一样 这其中也包括一些基本的优化技巧 下面是创建索引的命令 gt db test ensureIndex username 1 可以通过下面的名称查看索引是否已经成功建立 gt
  • java获取相对路径

    在jsp和class文件中调用的相对路径不同 在jsp里 根目录是WebRoot 在class文件中 根目录是WebRoot WEB INF classes 当然你也可以用System getProperty user dir 获取你工程的
  • sqli-labs-less-12 PODT传参+有回显信息(图文详解)

    Less 12 post传递参数 由于是post传参 我们先用burp suite抓包 分析报文体 获取传参过程 得到报文体之后使用hackbar插件中的post data进行注入实验 判断闭合方式 uname or 1 1 passwd
  • 【一周算法实践集训】_【模型构建】_baseline

    读取数据 import pandas as pd data all pd read csv data all csv encoding gbk encoding gbk 解决编码问题 划分数据集 划分训练集测试集 from sklearn
  • 讨论保护网络隐私的方法与策略

    随着网络技术的不断发展 网络成为了人们日常生活中最为重要的媒介之一 每个人都在网络上留下了大量的个人信息和隐私 这些信息有时甚至比我们现实生活中留下的资料更为丰富和详尽 然而 随着网络安全问题层出不穷 网络上的这些个人信息也暴露在了一些不良
  • Python新手入门-软件安装配置篇

    Python开发建议使用 pycharm Anaconda Anaconda中包含Python解释器及各种要用到的工具包 使用十分方便 如果只是下载Python的话 后期使用过程中还要自行下载安装各种安装包 网速可以的话还好 不好的话半天下
  • 条款13: 以对象管理资源

    结论 为防止资源泄漏 请使用RAII对象 它们在构造函数中获得资源并在析构函数中释放资源 两个常被使用的RAII classes分别是tr1 share ptr和auto ptr 前者通常是较佳选择 因为其copy行为比较直观 若选择aut
  • 7位创业者,6分钟,一个错误

    我发现所有的饭馆里都写着 顾客是第一 客人是上帝 但是真正做到这一点的也就是海底捞 在那里才真正感觉到我们是上帝 我把手机刮掉玻璃人家也说送 我也曾享受过免单的待遇 所有互联网创业者 所有公司的价值观肯定包括 以用户的需求 以用户体验为第一
  • Kafka配置安全认证

    Kafka配置安全认证 提示 为了对数据的安全考虑 在对kafka进行读取数据时需要添加安全认证 在摸索了大量博主的博客后 自己终于把这安全认证给安排了 废话不多说 往下走 文章目录 Kafka配置安全认证 文章目录 一 环境 二 修改ka
  • 创意无限!AI绘画、ChatGPT、AIGC工具合集,让你的创作梦想成真

    你是否曾经想象过有一套工具 可以将你的创意推向新的高度 现在 你的梦想即将成真 我们为你带来了一款令人兴奋的AIGC工具合集 集成了AI绘画 ChatGPT等功能 助你轻松实现想法 创作艺术 解决问题 而一切都在你的指尖 AI绘画 创意无限
  • 为什么私有GIT服务器上无法查看上传的代码?

    我的个人博客 逐步前行STEP 今天按教程十分简单地搭建了GIT服务器 但是在客户端实践远程仓库之后 一直无法在服务器对应目录看到上传的代码 而另一个客户端却可以从服务器下载代码 后来才发现我创建git仓库的 git init bare s
  • 服务器系统需求表,服务器操作系统需求

    服务器操作系统需求 内容精选 换一换 示例 购买并登录Windows弹性云服务器示例 购买并登录Linux弹性云服务器云平台提供了多种实例类型供您选择 不同类型的实例可以提供不同的计算能力和存储能力 同一实例类型下可以根据CPU和内存的配置
  • Linux系统调用 汇编 int 80h

    1 系统调用 在计算机中 系统调用 英语 system call 又称为系统呼叫 指运行在使用者空间的程序向操作系统内核请求需要更高权限运行的服务 系统调用提供了用户程序与操作系统之间的接口 大多数系统交互式操作需求在内核态执行 如设备IO
  • 【作业】{r} :Shiny app 中使用 isolate 函数,达到 app 作图变换时的不实时反馈效果

    作业要求 在本节中 Shiny app 中使用 isolate 函数 达到 app 作图变换时的不实时反馈效果 即添加一个类似 刷新 refresh 按钮 实现每次图像变换的反馈产生延迟 作图分为 ggplot 和 plot 两种类型 交作
  • 卡尔曼滤波、扩展卡尔曼滤波、无迹卡尔曼滤波以及粒子滤波原理

    所有滤波问题其实都是求感兴趣的状态的后验概率分布 只是由于针对特定条件的不同 可通过求解递推贝叶斯公式获得后验概率的解析解 KF EKF UKF 也可通过大数统计平均求期望的方法来获得后验概率 PF 1 KF EKF UKF 1 1 定义
  • 数学建模 matlab MATLAB机器学习 分类方法 支持向量机分类 乳腺癌的诊断

    一 理论基础 1 支持向量分类机的基本原理 1 1线性可分支支持向量分类机 1 2 线性支持向量分类机 1 3可分支支持向量分类机 1 4C 支持向量分类机 二 案列 1 支持向量机的分类模型 支持向量机 Sport Vector Mach
  • 机器学习基础-岭回归-06

    岭回归Ridge Regression 标准方程法 岭回归 import numpy as np from numpy import genfromtxt import matplotlib pyplot as plt 读入数据 data
  • 了解APT攻击以及防御和密码学

    1 什么是APT APT攻击也就是可持续攻击也被称为威胁攻击 隐蔽性极强的一种攻击手段 APT攻击是一个集合了多种攻击的综合攻击 综合多种攻击途径来尝试突破网络防御 通常是通过web或电子邮件传递 利用应用程序或操作系统的漏洞 利用传统的网

随机推荐

  • 【Java面试题】spring+springMVC+mybatis原理及实现机制(持续更新)

    本文将持续更新 主要讲解SSM框架的底层原理和实现机制等 1 什么是IOC IOC即Inverse of Control 它包括两个内容 控制与反转 那到底什么东西的 控制 被 反转 了呢 对于软件而言 即是某一个接口具体实现类的选择控制权
  • Uva1225之数数字

    这一题时Uva上的1225 这一题做法有很多 但是做起来有超时 后来就去看别人的做法 在博客中看到有的人直接建表的方法 感觉很不错 居然只用了短短几行代码搞定 真的很强 作者 csdn博客 synapse7 include
  • matlab中newrb函数用途,神经网络matlab函数使用

    实现的分类结果真的不好 才0 3 这里只是简单的说明怎么使用函数 至于实现达不到效果的问题 后续会研究 clear all clc 读入数据 xlsfile train txt x load xlsfile m n size x train
  • C++学习(二十七)define内存分析

    define的内存单元在程序运行前已经分配 宏定义只是在预处理器里进行文本替换 编译后放在常量数据区
  • qt之出差账单app-管理你的行程

    前言 分享一个为了自己出差记账方便管理的软件 qt for Android开发 环境 qt版本 Based on Qt 5 10 0 MSVC 2015 32 bit for Android环境自己搭建 正文 话不多说 看效果图 功能很简单
  • MonoSQL--支持SQL,让DynamoDB更强大

    MonoSQL from MonographDB MonoSQL是成章数据打造的一款基于DynamoDB的分布式SQL数据库 受益于DynamoDB的Serverless架构和任何数据规模下的查询个位数延时保障 MonoSQL在支持SQL生
  • PCB板上字母的含义

    阅读PCB板子文件 发现板子上字母的大致符合表中规律 PCB板上 字母 数字 如R16 C16 表示的含义 一般数字表示出现的次数 字母表示的意义如下 字母 含义 R 电阻 C 电容 K 继电器 L 电感 U 整流器 字母的意义并非始终与表
  • 问题记录setStyleSheet:Qt样式表频繁设置导致CPU占用过高问题

    一 问题 APP控件 QWidget 主窗口 背景利用setStyleSheet设置 同时重写paintEvent事件 QWigdet的paintEvent默认为空 void mainWidget paintEvent QPaintEven
  • Java数组转Json数组

    package com cnic test coding import com alibaba fastjson JSONArray public class ArrToJson public static void main String
  • Java中为什么要重写hashCode方法和equals方法?重写了equals方法为什么还要重写hashCode方法? 啊~~终于明白了

    在我们开发中 可能经常听到重写hashCode方法和equals方法 这是为什么呢 为了更容易通俗易懂 来个小故事缓解一下激动的心情 打个比方 一个名叫张三的人去住酒店 在前台登记完名字就去了99层100号房间 此时警察来前台找叫张三的这个
  • 查询数据库所占空间大小

    目录 统计数据库整体所占大小 统计数据库中各表所占大小 统计数据库整体所占大小 select table schema as 数据库 sum table rows as 记录数 sum truncate data length 1024 1
  • 华为19级专家10年心血终成百页负载均衡高并发网关设计实战文档

    负载均衡 LoadBalance 的字面意思是将工作负载分担到多个工作单元上进行执行 它建立在现有网络结构之上 是构建分布式服务 大型网络应用的关键组件 近十几年来 负载均衡技术层出不穷 令人眼花缭乱 如果问身边的技术人员什么是负载均衡 我
  • Vjava学习笔记之(VirtualMachine 内存(总容量和已使用))

    源代码 package com vmware client import com vmware util Session import com vmware vim25 HostListSummary import com vmware v
  • 11G RAC 中 OCR 及Voting Disk 相关操作

    一 启动oracle clusterware 先决条件 Oracle High Availability Services daemon OHASD 运行在所有集群节点上 1 启动整个Oracle Clusterware stack crs
  • windows下git

    下载gitGit for Windows Windows安装git图文教程 喵代王 香菜的博客 CSDN博客 windows安装git 创建文件夹 右键 git bash here 同mac使用
  • 基于Spring Boot的ERP仓储管理信息系统设计与实现毕业设计源码150958

    基于Spring Boot的ERP仓储管理信息系统设计与实现 摘 要 科技进步的飞速发展引起人们日常生活的巨大变化 电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用 信息时代的到来已成为不可阻挡的时尚潮流 人类发展的
  • 如何实现一个IO口读取多个设备信息

    前言 1 今天遇到一个有意思的问题一个IO口如何读取多个电机的堵转问题 之后他就发了一张图片 2 看到这个问题 之前先说一个简单的 我们如何实现一个IO读取多个按键 了解了这个之后 对于多个电机堵转就很好理解了 如何实现一个IO对多个按键读
  • 直方图均衡化原理

    原文 http www cnblogs com tianyalu p 5687782 html 直方图均衡化原理 直方图均衡化的作用是图像增强 有两个问题比较难懂 一是为什么要选用累积分布函数 二是为什么使用累积分布函数处理后像素值会均匀分
  • 从零开始的Java开发 笔记目录(跑路了)

    写在前面 不全 学习资料来源于网络 已经跑路了 文章目录 阶段1 Java零基础入门 第1周 环境搭建与语法入门 第2周 Java语法之循环 数组与方法 第3周 面向对象之封装与继承 第4周 面向对象之单例模式与多态 第5周 常用工具类 上
  • linux c++遍历文件夹下所有文件,C++ 遍历目录下文件

    function 遍历目录下所有文件 返回文件总数 子文件夹总数 修改一下可以获得全部文件名等 include stdlib h include direct h include string h include io h include