C++如何统计文件夹下文件个数

 我来答
妖吾爱丫头
2012-05-28
知道答主
回答量:22
采纳率:0%
帮助的人:22.4万
展开全部
dir /b | find /v /c "$$$$" > 1.log

该结果统计当前目录下的文件和目录数。

如果只需要文件,使用

dir /b /a-d | find /v /c "$$$$" >1.log
--
※ 来源:·水木社区 newsmth.net·[FROM: 125.46.17.*]

今天去水木看到的.果然强.我来解释一下意思

dir /b 使用空格式(没有标题信息或摘要)。

dir /a-d /a是显示具有指定属性的文件。d是目录,-d就是去掉目录

| 通道符,把dir /b的输出当中后面find的输入

find

/v 显示所有未包含指定字符串的行。

/c 仅显示包含字符串的行数

"$$$$" 特殊字符,一般文件中都没这个字符,不过可以用$$$$来命名文件夹,所以我建议用冒号,这个不能当作文件夹或者文件的名字.

> 输出到

1.log 文件

这个比较好:dir /b | find /v /c ":" > 1.log

=============================

扩展:

包含子目录:

C++代码
tree /F | find /c "." // 带点的文件
tree /F | find /v /c "/" // /是文件命名时禁止使用的,统计全部文件
Linux 下:

C++代码
# ls -l * |grep "^-"|wc -l // to count files
# ls -l * |grep "^d"|wc -l // to count dir
Linux,包括子目录

C++代码
# ls -lR * |grep "^-"|wc -l // to count files
# ls -lR * |grep "^d"|wc -l // to count dir
==================================================

CSDN相关解释:

int count;

int CGetFileCountDlg::GetFileCount(CString szPath)
{
count = 0;
Recurse(szPath);
return count;
}
void CGetFileCountDlg::Recurse(LPCTSTR pstr)
{
CFileFind finder;

// build a string with wildcards
CString strWildcard(pstr);
strWildcard += _T("\\*.*");

// start working for files
BOOL bWorking = finder.FindFile(strWildcard);

while (bWorking)
{
bWorking = finder.FindNextFile();

if (finder.IsDots()) //判断是否是文件
continue;
if(!finder.IsDirectory())
{
count ++;
}
// if it's a directory, recursively search it
if (finder.IsDirectory()) //判断是否是文件夹 //路径
{
CString str = finder.GetFilePath();
Recurse(str);
}

}

finder.Close();
}

count 就是目录下文件的个数

----------------------------------------------------------------------------

SDK的

HANDLE hFind;
WIN32_FIND_DATA dataFind;
BOOL bMoreFiles=TRUE;
int iCount=0;//统计文件数的变量

//m_strDir就是你要指定的路径
hFind=FindFirstFile(m_strDir+"\*.*",&dataFind);//找到路径中所有文件

//遍历路径中所有文件
while(hFind!=INVALID_HANDLE_VALUE&&bMoreFiles==TRUE)
{
if(dataFind.dwFileAttributes!=FILE_ATTRIBUTE_DIRECTORY)//判断是否是文件
{
iCount++;
}
bMoreFiles=FindNextFile(hFind,&dataFind);
}
FindClose(hFind);
greystar_cn
推荐于2016-09-24 · 知道合伙人软件行家
greystar_cn
知道合伙人软件行家
采纳数:16407 获赞数:17260
本人主要从事.NET C#方向的技术开发工作,具有10多年的各类架构开发工作经验。

向TA提问 私信TA
展开全部
int count;

int
CGetFileCountDlg::GetFileCount(CString szPath)
{
count
= 0;
Recurse(szPath);
return count;
}
void CGetFileCountDlg::Recurse(LPCTSTR pstr)
{
CFileFind finder;

// build a string with
wildcards
CString strWildcard(pstr);
strWildcard +=
_T("\\*.*");

// start working for files
BOOL bWorking = finder.FindFile(strWildcard);

while (bWorking)
{
bWorking =
finder.FindNextFile();

if (finder.IsDots())
//判断是否是文件
continue;
if(!finder.IsDirectory())
{
count ++;
}
// if it's a
directory, recursively search it
if (finder.IsDirectory())
//判断是否是文件夹 //路径
{
CString str =
finder.GetFilePath();
Recurse(str);
}

}

finder.Close();
}

count 就是目录下文件的个数

SDK的

HANDLE hFind;
WIN32_FIND_DATA dataFind;
BOOL bMoreFiles=TRUE;
int iCount=0;//统计文件数的变量

//m_strDir就是你要指定的路径
hFind=FindFirstFile(m_strDir+"\*.*",&dataFind);//找到路径中所有文件

//遍历路径中所有文件
while(hFind!=INVALID_HANDLE_VALUE&&bMoreFiles==TRUE)
{
if(dataFind.dwFileAttributes!=FILE_ATTRIBUTE_DIRECTORY)//判断是否是文件
{
iCount++;
}
bMoreFiles=FindNextFile(hFind,&dataFind);
}
FindClose(hFind);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
62055624
推荐于2017-12-15 · TA获得超过3168个赞
知道大有可为答主
回答量:8186
采纳率:0%
帮助的人:4271万
展开全部
就是不能确定文件夹内文件数目,所以在第一句加了个set,每次要改数字,非常只是要得到某文件夹下的文件数的话我想可以使用dir命令来实现假设目录为C:\\,luRWQh
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友12f339c
2012-05-29 · 超过11用户采纳过TA的回答
知道答主
回答量:166
采纳率:0%
帮助的人:60万
展开全部
没听懂什么意思啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式