实习总结之——MyEverything

标签: 习总 myeverything | 发表时间:2011-10-04 13:43 | 作者:赵杰_yiwenshengmei chuang
出处:http://www.cnblogs.com/

在PPTV的实习就快要结束了,现在应该来总结一下。实习期间我总共干了4件事情:
  • 基于 Kinect SDK 做开发
  • WPF 应用程序开发
  • 研究 Node.js
  • 研究 Everything

这篇文章主要来介绍我做的第4件事:研究“Everything”软件的技术并自己实现一个demo——MyEverything,什么是Everything?点击查看Everything的介绍。程序是字符界面的,因为仅仅是为了学习。程序实现了如下功能:

  • 能够在很短的时间内扫描你指定分区上的所有文件并把文件信息存储在内存数据库中。
  • 根据文件名搜索文件,速度很快。
  • 可以监视一个已经扫描过的分区,该分区上所有文件的创建、删除、改名操作都可以被瞬间感知并更新到内存数据库。
先来看看我做的技术收集(about "Everything")

Everything软件的实现技术用到了NTFS 5.0中加入的Change Journal特性,操作该特性的win32 api(DeviceIoControl)为我们提供了两大功能:

  • 快速遍历分区上的文件和文件夹
  • 监视分区上文件和文件夹的变化
于是便有了像Everything这样只搜索名字但是速度奇快的硬盘搜索软件。下面来看看我做的MyEverything程序的使用。在以后的文章中我再介绍实现代码。

上图展示的是最基本的使用方法:输入你想扫描的分区,图中输入的是C: D: E:,注意,第一次运行本程序可能会花点时间,因为NTFS的JournalSystem默认是不打开的,打开需要一定的时间,第二次运行程序由于NTFSJournal已经被打开,时间将会大幅度缩短。

输入?可以打开帮助,有三条命令可以使用,分别是搜索、监视和退出程序。输入s filename可以搜索文件名中带filename字样的文件和文件夹,当然前提是这些文件存在于之前扫描过的分区上,输入的文件名不能带有空格哦!结果将会打印在屏幕上,如果预料到输出的结果会很多,可以加上一个输出文件名参数,这样结果会写入输出文件而不打印到屏幕上,例如:s filename E:\log.txt

另外,若要在重要的人面前进行演示,请不要输入wmv、avi、rmvb等关键字搜索,这个你懂的。

上图展示的是监视分区的功能,监视某个分区意味着该分区上所有文件的变化都会被程序感知,MyEverything需要处理的文件变化类型是文件的新建、删除和重命名,因为这些操作会影响到搜索结果。截图中首先输入mo E:,表示监视E:分区,然后搜索文件debug333.txt,发现在E:根目录存在该文件。然后我删除了E:\debug333.txt,再次搜索,发现文件搜索不到了,换个文件名搜索jzhao.txt,发现文件不存在,在E:根目录创建文件jzhao.txt后再次搜索,文件被搜索出,这就是监视的效果。

上图展示的是在监视分区过程中输出debug信息的功能,只要为mo命令添加第二个参数debug即可,例如:mo E: debug

输入监视命令后,我在E:根目录创建文件“实验.txt”,屏幕上立即输出了3条记录,分别是“New file E:\实验.txt added.”、“File E:\实验.txt deleted”和“New file E:\实验.txt added.”,奇怪不?我也觉得很奇怪,但至少最后反映到内存数据库的结果是文件被创建了。

之后我将实验.txt删除至回收站,于是我们看到了一条重命名记录,仔细观察会发现这其实是将文件从E:根目录移动到了回收站中。然后我在桌面上单击鼠标右键选择“撤销 删除”,屏幕上又出现了一条重命名记录,仔细观察,其实是文件从回收站中移回了E:根目录。最后我对文件实施shift + delete,这次只出现了“File E:\实验.txt deleted”一条记录。如果你通过源代码建立工程并以debug模式运行程序,你会发现更详细的记录,这些记录反应的是操作系统对NTFS格式分区实际的底层操作。

程序中没有的功能:

  • 程序每次打开都要重新扫描磁盘,因为程序是用来演示的,程序关闭后没有保存上次扫描后的结果。
  • 尚未测试过对文件夹的监视
  • 和Everything一样,本程序不能搜索文件的内容

最后附上项目地址:https://github.com/yiwenshengmei/MyEverything

 

作者: 赵杰_yiwenshengmei 发表于 2011-10-04 13:43 原文链接

评论: 5 查看评论 发表评论


最新新闻:
· 诺基亚或将于10月末发布首款Windows智能手机(2011-10-04 22:56)
· 三星或放弃在澳大利亚发售Galaxy Tab 10.1(2011-10-04 22:50)
· 黑莓 Playbook 原生 SDK 向指定应用开发者开放(2011-10-04 20:38)
· Adobe面向平板电脑推出Photoshop Touch(2011-10-04 20:22)
· 传Hulu本周开始第二轮竞价:出售几率降低(2011-10-04 20:20)

编辑推荐:使用memc-nginx和srcache-nginx模块构建高效透明的缓存机制

网站导航:博客园首页  我的园子  新闻  闪存  小组  博问  知识库

相关 [习总 myeverything] 推荐:

实习总结之——MyEverything

- chuang - 博客园-首页原创精华区
在PPTV的实习就快要结束了,现在应该来总结一下. 基于 Kinect SDK 做开发. 研究 Everything. 这篇文章主要来介绍我做的第4件事:研究“Everything”软件的技术并自己实现一个demo——MyEverything,什么是Everything. 点击查看Everything的介绍.

WEKA学习总结

- - CSDN博客互联网推荐文章
1.      Weka处理的数据表格中,一个横行称为一个实例(Instance),竖行代表一个属性(Arrtibute),数据表格称为一个数据集,在weka看来,呈现了属性之间的一种关系(Relation). 2.      Weka存储数据的格式是ARFF(Attribute-RelationFile Format)文件,这是一种ASCII文本文件.

Hadoop学习总结

- - 开源软件 - ITeye博客
  一个开发和运行处理大规模数据的软件平台,是Appach的一个用java语言实现开源软件框架,实现在大量计算机组成的集群中对海量数据进行分布式计算. Hadoop框架中最核心设计就是:HDFS和MapReduce,HDFS实现存储,而MapReduce实现原理分析处理,这两部分是hadoop的核心.

iptables 学习总结

- - 小火箭
参考文章: 朱双印 iptables. 主机防火墙:对单个主机进行防护. 网络防火墙:通常处于网络的入口/出口,服务于其背后的局域网. 硬件防火墙:在硬件级别实现部分防火墙功能,另一部分功能基于软件实现,性能高,成本高. 软件防火墙:应用软件处理逻辑运行于通用硬件平台之上的防火墙,性能低,成本低.

JUnit学习总结——断言

- - Taobao QA Team
JUnit是Java语言的测试框架,用于编写和运行可重复的测试. 为了便于确定某些被测试函数是否工作正常,JUnit提供了一些辅助函数,这些函数统称为断言. 最近学习JUnit,特将全部JUnit断言整理了一下,方便自己回顾也算是为以后的新人提供一些参考. assertTrue验证condition是否为true.

hadoop project 学习总结

- - 学着站在巨人的肩膀上
hadoop 项目源自于google的几篇论文. hdfs 提供一个分布式存储,类似于磁盘阵列. 基于一个假设:文件读取操作多,很少改,读文件时总是对一个文件整个顺序读取. 把文件切分成64M的块儿,分开存储,大文件有利于提高磁盘寻道的效率,一次查找大段的读取. 最好的情况下每块儿都在不同的机器上,分散I/O.

RTMP 协议学习总结

- - C++博客-牵着老婆满街逛
RTMP协议是一个互联网TCP/IP五层体系结构中应用层的协议. RTMP协议中基本的数据单元称为消息(Message). 当RTMP协议在互联网中传输数据的时候,消息会被拆分成更小的单元,称为消息块(Chunk). 消息是RTMP协议中基本的数据单元. 不同种类的消息包含不同的Message Type ID,代表不同的功能.

Java内存结构学习总结

- - ITeye博客
程序计数器:作用可以看成当前线程所执行的字节码的行号指示器. 为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器,各条线程之间的计数器互不影响,独立存储. 虚拟机栈:描述JAVA方法执行的内存模型,每个方法被执行的时候都会同时创建一个栈帧用于存储 局部变量表,操作数栈,动态链接,方法出口灯信息.

DRP学习总结(四)---Cookie和Session

- - CSDN博客推荐文章
        图中:张三和李四分别为客户端,Tomcat为服务器. 下面我写几点体会,给大家一起品味.  1.cookie机制和session机制.         cookie机制:cookie机制采用的是在客户端保持状态的方案    .         session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息.

JVM内存管理学习总结(一)

- - CSDN博客互联网推荐文章
I.JVM进程的生命周期. JVM实例的生命周期和java程序的生命周期保持一致,即一个新的程序启动则产生一个新的JVM进程实例,程序结束则JVM进程实例伴随着消失. 那么程序启动和程序终止就是JVM实例生命周期的两个边界,两个边界点可以这么理解:一个拥有程序入口(main函数)的class在执行main方法时,相应的JVM就被创建了(即JVM生命周期的起点),当由此main函数启动的所有非守护线程都终止时,JVM即退出(JVM实例生命周期的终点).