我正在寻找一个可以通知我文件系统更改的Java库.
我发现了一些免费的库,但它们都使用强力检测,即定期轮询.而其他的总是商业化的.
我正在寻找的是一个使用来自操作系统的文件监视器功能的库,即 用于Win32的FindFirstChangeNotification,用于Linux的FAM以及其他操作系统上可用的任何功能.我不介意使用暴力作为后备,但对于Windows和Linux,它应该使用可用的操作系统功能.
你知道任何linux程序,它会监视文件系统中目录和文件的访问吗?我想能够生成一些报告,说明在某段时间内访问某些文件的次数是多少?
我正在使用linux,我有一个目录,其中有子目录,子目录中有文件.我必须监视文件中的更改.在C++中我使用boost.我每隔30秒检查一次所有目录并查看last_write_time.原则上,它的工作原理.但每次执行此操作时,我的CPU都会疯狂,我看到15%-25%的CPU使用率仅适用于此程序.我读过关于inotify的文章.如果我使用inotify,我会有或多或少相同的CPU使用率,还是会改进?我正在做什么有什么好的选择吗?
由于文件/进程监视器在进行日志记录时无法进行过滤和不必要的重复,因此我希望重新创建该程序的功能并实时记录所有Windows文件操作.
我想记录各种属性,如时间,进程名称,源路径,目标路径,操作,结果和详细信息,就像Process Monitor一样.
如何让C#从操作系统中提取此信息?
编辑:正如zett42指出的那样,FileSystemWatcher例如,从进程本身创建的文件事件不会被拦截.举例来说,没有这些交易显示出来,即使我添加的事件:Changed,Created,Renamed,和Deleted到FileSystemWatcher和设置EnableRaisingEvents标志设置为true.
编辑2:使用SimonMourier建议的Microsoft.Diagnostics.Tracing.TraceEvent nuget包,我设法敲了下面的代码.
本节放入后台工作者:
Console.CancelKeyPress += (sender, e) => session.Stop();
session.EnableKernelProvider(KernelTraceEventParser.Keywords.All);
session.Source.Kernel.FileIOWrite += Kernel_FileIOWrite;
session.Source.Process();
Run Code Online (Sandbox Code Playgroud)
然后,在调用(自动)时,创建的FileIOWrite事件将运行以下命令:
private void Kernel_FileIOWrite(Microsoft.Diagnostics.Tracing.Parsers.Kernel.FileIOReadWriteTraceData obj)
{
string filename = obj.FileName;
string processpath = "";
if (obj.ProcessID == 0) processpath = "System Idle Process";
else if (obj.ProcessID == 4) processpath = "System";
else
{
try { processpath = "ID: " …Run Code Online (Sandbox Code Playgroud) 我想尝试一下有关分布式文件同步/复制的想法.为了在用户工作时提高效率,我想实现某种守护进程来监视某些目录中的更改(例如/ home/user/dirToBeMonitored或c:\ docs和setts\user\dirToBeMonitored).因此,我可以知道每次(或在合理的时间间隔内)添加/更改/删除了哪个文件名.
这可能与任何高中级语言一起使用吗?你知道一些API(以及使用哪种语言?)来做到这一点?
谢谢.
在Windows 7 64位机器上使用python 2.7.
如何获取文件关闭事件:
那么,如何在上述情况下获取文件关闭事件?是否可以通过公共代码实现上述情况?我正在处理不同的文件类型
我有一个视频编码脚本,我想在文件移动到特定目录后立即运行.
如果我使用像inotify这样的东西,我如何确保文件在完成移动之前不进行编码?
我考虑过这样做:
但是,如何使第2步正常工作并且仅在#1完成后运行?
我正在使用Ubuntu Server 11.10,我想使用bash,但如果能够简化问题,我可以说服我使用Python.
我不是将文件"下载"到这个目录中; 相反,我绝大多数时间都会使用rsync.
此外,此Ubuntu服务器正在VM上运行.
我通过NFS从FreeBSD服务器安装了我的主文件存储.
我正在读取一组文件(日志文件)中的行,因为它们是使用 pyinotify 编写的。
我正在使用 python 本机方法打开并读取文件:
file = open(self.file_path, 'r')
# ... later
line = file.readline()
Run Code Online (Sandbox Code Playgroud)
这通常是稳定的,可以处理被删除和重新创建的文件。pyinotify 将通知取消链接和后续链接。
但是,某些日志文件不会被删除。相反,它们被截断并将新内容写入同一文件的开头。
我无法可靠地检测何时发生这种情况,因为 pyinotify 仅报告写入。我目前得到的唯一证据是 pyinotify 报告写入并readline()返回一个空字符串。但是,后续的两次写入可能会触发相同的行为。
我曾考虑过比较文件的大小,file.tell()但根据文档tell会产生一个不透明的数字,并且似乎不能相信这是一个字节数。
有没有一种简单的方法来检测文件在读取时是否被截断?
编辑:
可以使用简单的 shell 命令来模拟截断文件:
echo hello > test.log
echo hello >> test.log
# Truncate test.log
echo goodbye > test.log
Run Code Online (Sandbox Code Playgroud)
为了补充这一点,可以使用一个简单的 python 脚本来确认file.tell()文件被截断时不会减少:
foo = open('./test.log', 'r')
line = foo.readline()
while line != '':
print(foo.tell())
print(line)
line = foo.readline()
# Put a breakpoint on the following line …Run Code Online (Sandbox Code Playgroud) 我创建了ac#库文件,它将转到本地路径,例如(c:\ test.txt)找到文件并上传到ftp服务器.
为了测试我只是从控制台应用程序调用dll,但我如何作为Windows服务运行,这将持续运行?
我想运行这个dll作为服务来监视c:\文件夹,如果任何文件像"test.txt"那样上传.
提前致谢
我想编写一个服务来监视给定文件集的更改,我从最简单的编写控制台应用程序开始,该应用程序监视目录以继续我的 POC。但是,我在尝试提取所做的实际更改时遇到了困难。(是的,我设法处理了FileSystemWatcher类中的事件,但就我看到的类的 API 而言,我无法跟踪实际更改)
你知道有没有办法做到这一点?也许没有那么多痛苦或不必要的操作。
我目前使用 .NET Core 2.0,但任何版本的 .NET Core 都可以。
编辑:我需要监视的文件是基于文本的,基本上我想实现git diff功能并报告更改。
对于我正在开发的一个小项目,我需要阻止“.exe”文件运行并知道尝试运行的文件的路径。也许 Windows API 挂钩可以帮助我,但我不确定,而且我还没有使用过它。
谁能指导我如何做到这一点,可能是通过 API 挂钩?