记录:C#监视某个文件的打开记录
首先,先说下为什么要搞这个:
1.首先,我的电脑里有5万左右的目录或文件,用于存放歌曲,数量众多。
2.我不一定会用哪种软件听歌(不过也就是几种而已)。
3.我想在听歌的时候,检测哪首首歌被打开,能获取到我正在放那首歌,用来记录播放顺序(播放器是随机播放的)。
4.【实例】我用一款“Ihear"播放器,开始播放歌曲,列表内有五万首歌,真实存放地址目录级数不确定,不知道这首歌具体在哪个目录,当然总的目录是确定的。我运行了一款”GetSong"软件,开始监视Ihear播放器,一旦播放器开始获取本地的歌曲文件开始播放,GetSong软件就会获取到是哪个文件被Ihear播放器读取(包括音乐文件与歌词文件),当然文件的绝对路径是肯定要获取到的。
以上就是我第一次和 陈希章 发的一个消息,向他询问解决方案。
当然一开始,我是自己尝试过的,FileSystemWatcher LastAccess 大家可以尝试搜索这两个关键字,这就是完成我上面描述的功能的解决方法。
当然,为了给别人使用,给程序加个 操作注册表 的功能,还是挺好用的。
当然,实现起来,并不是您想想的那么简单,如果真的直接就完成了,我也不会搞这个记录,更不会去向陈大师发邮件……
1. 首先我们要使用这个东西,肯定要写出类似的方法:(见 MSDN的附带示例)
public static void Main()
{
Run();
} [PermissionSet(SecurityAction.Demand, Name = "FullTrust")]
public static void Run()
{
// Create a new FileSystemWatcher and set its properties.
FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Path = @"D:\Temp";
/* Watch for changes in LastAccess and LastWrite times, and the renaming of files or directories. */
watcher.NotifyFilter = NotifyFilters.LastAccess ;
// Only watch text files.
watcher.Filter = "*.txt";
// Add event handlers.
watcher.Changed += OnChanged;
// Begin watching.
watcher.EnableRaisingEvents = true;
// Wait for the user to quit the program.
Console.WriteLine("Press \'q\' to quit the sample.");
while (Console.Read() != 'q') ;
} // Define the event handlers.
private static void OnChanged(object source, FileSystemEventArgs e)
{
// Specify what is done when a file is changed.
Console.WriteLine("File: " + e.FullPath + " " + e.ChangeType);
}
至于具体的解释,就不说了。我是直接搬过来的代码,有删减,不保证直接就能编译通过,请自行查错。
正题来了——如果你和我一样,用的是Win8系统,这个软件是肯定不能正常使用的,因为:
在Vista后的计算机预设是关闭更新 LastAccess 的,所以我们在怎么开启档案,在档案的属性页中他的存取日期都不会变动。
那知道了问题,就可以解决了,修改注册表(至于如何手动修改,还是百度下吧,我不细说了):
将 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem 下的 NtfsDisableLastAccessUpdate 给关闭,设成 就是关闭
这样,就解决了我的问题,可是重点是,这个软件,并不是我自己用的啊……那我们就给我们的软件,加个自动修改注册表?
private static void RunRegistry()
{
RegistryKey regKey = Registry.LocalMachine;
RegistryKey setKey = regKey.OpenSubKey(@"SYSTEM\CurrentControlSet\Control\FileSystem", true);
object val0 = setKey.GetValue("NtfsDisableLastAccessUpdate", null); Console.WriteLine("获取到的注册表的值是:\t" + val0);
Console.WriteLine("输入一个要修改的值吧,只能是 0 或者 1 哦。"); string k1 = Console.ReadLine();
if (k1 == "" || k1 == "")
{
setKey.SetValue("NtfsDisableLastAccessUpdate", k1, RegistryValueKind.String);
}
while (Console.Read() != 'q') ;
}
这样我们就能改注册表了吧?不过此时想想,我们这个软件竟然能改注册表?简直不可思议啊!权限够不够啊?安全性令人堪忧……
答案显而易见……普通的权限,注册表肯定是改不了的……
我们搜索一下:c# 获得管理员权限 ,然后找个法子来解决我们的问题:(manifest 应用程序清单文件)
<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app" />
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
</requestedPrivileges>
<applicationRequestMinimum>
<defaultAssemblyRequest permissionSetReference="Custom" />
<PermissionSet class="System.Security.PermissionSet" version="1" ID="Custom" SameSite="site" Unrestricted="true" />
</applicationRequestMinimum>
</security>
</trustInfo>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
</application>
</compatibility>
</asmv1:assembly>
请注意浅绿色高亮区域的值,我们选用的是 requireAdministrator
这样,我们的项目在运行时,就会向“UAC”请求管理员权限了。
哦,还要注意一个细节问题,直接调试运行我们的项目,项目会继承VS的权限的,他好像不会申请UAC,至于怎么获取……
也许,我只是说也许,去掉项目属性里的那个:调试/启用 Visual Studio 承载进程 也许好使吧……
记录:C#监视某个文件的打开记录的更多相关文章
- PHP 错误与异常 笔记与总结(5)配置文件中与错误日志相关的选项 && 将错误记录到指定的文件中
[记录错误(生产环境)] php.ini: ① 开启 / 关闭 错误日志功能 log_errors = On ② 设置 log_errors 的最大字节数 log_errors_max_len = 其 ...
- 记录SQL Server2008日志文件损坏的恢复过程
记录SQL Server2008日志文件损坏的恢复过程: 环境: 系 统:Windows Server2003 数据库:SQL Server2008 故障原因: 通过mstsc链接同一服务器时,用户界 ...
- git log 查看指定文件的提交记录
使用git log除了可以看整个仓库的提交记录外,还可以指定某个文件的提交记录. 1. 查看指定文件的历史提交记录 命令: git log -- <file> 说明:只需要指定文件名称. ...
- 如何永久删除git仓库中敏感文件的提交记录
如何永久删除git仓库中敏感文件的提交记录 参考: 1. https://help.github.com/articles/remove-sensitive-data/
- cvs history,CVS中查询目录下所有文件的提交记录
我们习惯用eclipse svn中查看一个目录下,甚至整个工程下,所有的文件的变更列表:操作为:右键工程 -> Team -> Show History. 最近在使用CVS,eclipse ...
- 删除Git记录里的大文件
删除Git记录里的大文件 仓库自身的增长 大多数版本控制系统存储的是一组初始文件,以及每个文件随着时间的演进而逐步积累起来的差异:而 Git 则会把文件的每一个差异化版本都记录在案.这意味着,即使你只 ...
- Hibernate3中重复引用hbm文件错误信息记录
Hibernate3中重复引用hbm文件错误信息记录. 八月 ::, ERROR - Context initialization failed org.springframework.beans.f ...
- git使用记录二: 给文件重命名的简单方法
git使用记录三: 给文件重命名的简单方法 git mv file_name_old file_name_new mv: 文件命名 file_name_old : 文件当前的名字 file_name_ ...
- Android加载SD卡目录,文件夹遍历,图片设置,设置文件对应打开方式等
此案例主要说的是Android使用GridView加载SD卡下所有目录,文件夹多层遍历,文件图标修改,设置文件对应打开方式等功能. 如图: 代码: public class GridViewFile ...
随机推荐
- SchemaSpy
SchemaSpy https://github.com/schemaspy/schemaspy/releases https://sourceforge.net/projects/schemaspy ...
- 发布Hessian服务作为服务内部基础服务
摘要:Hessian经常作为服务内部RPC工具来使用,速度快效率高.重构代码的核心思想就是把共用的代码段提出来,使代码结构优化:架构设计类似,把基本的共用的服务提出来,使架构优化.下面讲述一下我在具体 ...
- @autoclosure-可以让表达式自动封装成一个闭包:输入的是一个表达式
@autoclosure 在闭包前面加上@autoclosure func or(first:Bool,@autoclosure second:()->Bool) -> Bool { if ...
- BZOJ4827:[HNOI2017]礼物(FFT)
Description 我的室友最近喜欢上了一个可爱的小女生.马上就要到她的生日了,他决定买一对情侣手环,一个留给自己,一 个送给她.每个手环上各有 n 个装饰物,并且每个装饰物都有一定的亮度.但是在 ...
- SpringMVC(1)
1.简要说明: Spring为展现层提供的基于MVC设计理念的优秀web框架,目前主流的框架 Spring3.0以后全面超越Struts2,成为最优秀的MVC框架 Spring MVC通过一套MVC注 ...
- update会锁表吗?
update会锁表吗? 两种情况: 1.带索引 2.不带索引 前提介绍: 方式:采用命令行的方式来模拟 1.mysq由于默认是开启自动提交事务,所以首先得查看自己当前的数据库是否开启了自动提交事务. ...
- 三十、详述使用 IntelliJ IDEA 解决 jar 包冲突的问题
在实际的 Maven 项目开发中,由于项目引入的依赖过多,遇到 jar 冲突算是一个很常见的问题了.在本文中,我们就一起来看看,如何使用 IntelliJ IDEA 解决 jar 包冲突的问题!简单粗 ...
- one or more listeners failed to start问题解决思路
今日搭建一个web应用的时候总是遇到tomcat报错:one or more listeners failed to start. Full detail balabale....而且还没有其他提示, ...
- Flask—08-建立自己的博客(02)
博客项目 上一篇内容完善 自定义字段验证函数 class RegisterForm(FlaskForm): ... def validate_username(self, field): user = ...
- js检测是否可以访问公网服务器
wifi认证开发过程所用到的,源码如下: 注:检测AC是否放行成功,是否可以访问公网阿里云服务器 功能调用: checkNet().then(function(res) { if(res) { //连 ...