使用Parallel计算目录中的文件字节长度
/// <summary>
/// 根据通配符和搜索条件计算给定目录中的文件字节长度
/// </summary>
/// <param name="path"> 要搜索的目录的相对或绝对路径。 此字符串不区分大小写。</param>
/// <param name="searchPatter">要与 path 中的文件名匹配的搜索字符串。 此参数可以包含有效的文本路径和通配符(* 和 ?) 字符(参见“备注”)的组合,但不支持正则表达式。</param>
/// <param name="searchOption">指定搜索操作是应仅包含当前目录还是应包含所有子目录的枚举值之一。 默认值为 System.IO.SearchOption.TopDirectoryOnly。</param>
/// <returns></returns>
private static Int64 DirectoryBytes(string path, string searchPatter, SearchOption searchOption)
{
Int64 masterTotal = ; //返回一个可枚举集合,它包含 path 指定的目录中与指定的搜索模式和选项匹配的文件的完整名称(包括路径)。
var files = Directory.EnumerateFiles(path, searchPatter, searchOption); //提供有关执行的完成状态 System.Threading.Tasks.Parallel 循环。
ParallelLoopResult parallelLoopResult = Parallel.ForEach<string, Int64>(
//source 可枚举的数据源
files, //localInit 用于返回每个任务的本地数据的初始状态的函数委托。
//每个任务开始前调用一次
() =>
{
//开始前总计数初始化为0,即将taskLocalTotal初始化为0
return ;
}, //body 将为每个迭代调用一次的委托。
(file, loopState, index, taskLocalTotal) =>
{
//获得这个文件的大小,把它添加到这个任务的累加值上
Int64 fileLength = ;
FileStream fileStream = null;
try
{
fileStream = File.OpenRead(file);
fileLength = fileStream.Length;
}
catch (IOException)
{
//忽略拒绝访问的任何文件
}
finally
{
fileStream?.Dispose();
}
return taskLocalTotal + fileLength;
}, //localFinally 用于对每个任务的本地状态执行一个最终操作的委托。
taskLocalTotal =>
{
//将这个任务的总计值(taskLocalTotal)加到总的总计值(masterTotal)上
Interlocked.Add(ref masterTotal, taskLocalTotal);
}
); return masterTotal;
}
使用Parallel计算目录中的文件字节长度的更多相关文章
- find - 递归地在层次目录中处理文件
总览 SYNOPSIS find [path...] [expression] 描述 DESCRIPTION 这个文档是GNU版本 find 命令的使用手册. find 搜索目录树上的每一个文件名,它 ...
- Linux find命令:在目录中查找文件(超详解)
find 是 Linux 中强大的搜索命令,不仅可以按照文件名搜索文件,还可以按照权限.大小.时间.inode 号等来搜索文件.但是 find 命令是直接在硬盘中进行搜索的,如果指定的搜索范围过大,f ...
- python glob 用通配符查找指定目录中的文件 - 开源中国社区
python glob 用通配符查找指定目录中的文件 - 开源中国社区 python glob 用通配符查找指定目录中的文件
- Linux查看目录中的文件
Linux查看目录中的文件 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ ls examples.desktop jdk 公共的 视频 文档 音乐 java ...
- File类之在指定目录中查找文件
package IoDemo; import java.io.File; /** * @Title:FileDemo2 * @Description:在指定的目录中查找文件 * @author Cra ...
- Python 对目录中的文件进行批量转码(GBK>UTF8)
通过python实现对文件转码,其实处理很简单: 1.打开读取文件内容到一个字符串变量中,把gbk编码文件,对字符串进行decode转换成unicode 2.然后使用encode转换成utf-8格式. ...
- Git 忽略某个目录中的文件,同时保留这个目录
类似的一个问题是项目根目录下可能有 logs 一类的目录, 我们希望他人把仓库 clone 下来的时候能够已经携带了这个目录, 但又不希望让这个目录中的日志文件进版本库. 之前看到一些项目用了一种比较 ...
- Java非递归的方式获取目录中所有文件(包括目录)
零.思路解析 对于给出的文件查看其下面的所有目录,将这个目录下的所有目录放入待遍历的目录集合中,每次取出该集合中的目录遍历,如果是目录再次放入该目录中进行遍历. 一.代码 /** * 非递归的方式获取 ...
- android 打开 res raw目录 中 数据库文件
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha 安卓不能直接打开 res raw 中的 数据库 文件. 通过 资源 获取资源 方法 , ...
随机推荐
- Linux下Apache虚拟主机配置
Linux下Apache虚拟主机的三种配置.这样可以实现一台主机架构多个独立域名网站.其中基于域名的最为常见.性价比也最高.下面PHP程序员雷雪松详细的讲解下Linux下Apache虚拟主机配置的具体 ...
- Elasticsearch全文检索引擎。什么是elasticsearch? 有什么特点? 怎么使用?
什么是ElasticSearch? Elasticsearch是一个基于Lucene的搜索引擎.它提供了具有HTTPWeb界面和无架构JSON文档的分布式,多租户能力的全文搜索引擎.Elasticse ...
- 《精通并发与Netty》学习笔记(05 - Google Protobuf与Netty的结合)
protobuf是由Google开发的一套对数据结构进行序列化的方法,可用做通信协议,数据存储格式,等等.其特点是不限语言.不限平台.扩展性强 Netty也提供了对Protobuf的天然支持,我们今天 ...
- xss 学习(一)
存储型 .反射型.DOM 型这是最常见的三种分类: 存储型存储型XSS也叫持久型XSS,存储的意思就是Payload是有经过存储的,当一个页面存在存储型XSS的时候,XSS注入成功后,那么每次访问该页 ...
- flex 遇上white-space:nowrap的2种解决方法
需求:使用flex布局,超出部分想使用点点点显示 一.方法1使用min-width:0 效果: HTML代码如下: <div class="team-body"> &l ...
- Android MVC MVP MVVM (二)
MVP模型 View主要是Activity,Fragment MVP和MVC的差别 1.Model和View不再直接通信,通过中间层Presenter来实现. 2.Activity的功能被简化,不再充 ...
- teach-es6-2(class)
1 属性的简洁表示法 ES6 允许直接写入变量和函数,作为对象的属性和方法.这样的书写更加简洁. var foo = 'bar'; var baz = {foo}; baz // {foo: &quo ...
- linux网络route
一.网络基础知识: 设备端获取的IP路由表 [root@HKVS /] # route –n Kernel IP routing table Destination Gateway ...
- Oracle-DQL 5- 分组函数(多行函数)
分组函数(多行函数):--针对表中的多行数据进行运算,返回一个结果 1.多行函数 --sum() 求和SELECT SUM(sal) FROM emp; --avg() 求平均值SELECT AVG( ...
- django channels
django channels django channels 是django支持websocket的一个模块. 1. 安装 `pip3 install channels` 2. 快速上手 2.1 在 ...