result.log该结果统计当前目录下的文件和目录数。如果只需要文件,使用dir /b /a-d | find ... 大学编程 大学编程是全国首个专为大学生打造的编程交流论坛,由一群充满青春活力的大学生创建维护,为大学生们提供一个编程交流平台,让大家在团结互助的学习环境中共同提升编程技术,共同成功 - Discuz! Archiver" />

查看完整版本: VC计算一个目录下的文件数

程序员 2008-5-5 17:38

VC计算一个目录下的文件数

VC遍历一个目录下的所有文件,这个功能很实用。

下面先让我们看一下dos命令是怎么实现的。

dir /b | find /v /c "$$$$" > result.log

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

如果只需要文件,使用

dir /b /a-d | find /v /c "$$$$" >result.log

我来解释一下意思

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

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

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

find

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

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

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

> 输出到

result.log 文件

这个比较好:dir /b | find /v /c ":" > result.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   

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

MSDN相关解释:

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);

其实上的代码可以在MSDN或者SDK中找到,这里解释一下了。
页: [1]
查看完整版本: VC计算一个目录下的文件数