简单计算文件夹及其子文件夹中的所有文件数量方法

2018/4/21 16:55:00


由于windows下文件存储是树形结构,使用递归的思想计算文件数量更为简单

如果文件存储形式如下图,则使用递归检索文件的顺序如图:

递归示例图

递归函数如下:
        /// <summary>
        /// 计算文件夹及其子文件夹中的所有文件数量
        /// </summary>
        /// <param name="storageFolder"></param>
        /// <returns></returns>
        public static async Task<int> FilesCount(StorageFolder storageFolder)
        {
            int count = 0;
            foreach(IStorageItem item in await storageFolder.GetItemsAsync())
            {
                if (item is StorageFile)
                    count++;
                else if (item is StorageFolder)
                    count += await FilesCount(item as StorageFolder);
            }
            return count;
        }

函数的返回值,是函数参数中的文件夹包含的文件数量。

第一次调用函数时,将要计算的文件夹作为参数,遍历该文件夹中的文件和文件夹。如果是文件,则计数+1;如果是文件夹,则将这个文件夹作为参数递归调用函数自身,并且计数加上函数返回结果。

递归的思想能使复杂问题简单化,结构较为清楚。


另外使用递归不止方便计算文件数量,也能使用类似方法对每个文件进行操作,只需稍加改动:

        public static async Task SomeOperations(StorageFolder storageFolder)
        {
            foreach(IStorageItem item in await storageFolder.GetItemsAsync())
            {
                if (item is StorageFile)
                    //操作文件
                else if (item is StorageFolder)
                    await SomeOperations(item as StorageFolder);
            }
            return count;
        }

比如计算文件夹大小、对每个文件进行验证等都可以使用这个方法