我有一个c#winform应用程序,它在本地帐户下运行,但需要监视域上的文件夹.我使用稍微修改过的代码从这里复制文件,并且工作正常.可以使用类似的代码与FileSystemWatcher设置模拟,以便我可以监控域上的文件夹吗?
在 Linux 上,我需要知道在从源代码编译和安装应用程序后添加/修改/移动/删除了哪些文件,即。命令行,Linux 相当于 venerale InCtrl5。
是否有执行此操作的实用程序,或一组我可以运行并显示更改的命令?
谢谢你。
编辑:以下命令还可以,但我不需要知道发生更改或更新“./..”的行号:
# ls -aR /tmp > b4.txt
# touch /tmp/test.txt
# ls -aR /tmp > after.txt
# diff -u b4.txt after.txt
Run Code Online (Sandbox Code Playgroud) 例如,您知道该功能,C:\test.txt如果您在另一个编辑器中也有相同的文件,并且在那里编辑它,则在您返回时,应用程序将提示文件已更改,无论您是否要更新它.如何检查文件是否已更新?
UPDATE
问一个姐妹问题" 使用FileSystemWatcher来监视文件的变化 "
我正在使用 来FileSystemWatcher监视某个目录,当有人将编辑保存到文件时,我需要引发一个事件,而当他们创建或移动文件时,我需要引发另一个事件。
使用 和 Created 事件的组合可以很好地监视移动的文件Deleted。当有人将编辑保存到文件时,确实会引发 Changed 事件。但是,当他们移动文件时Changed,事件也会引发,这会干扰我对Created和已删除事件的处理。
所以基本上,我只想在用户将编辑保存到文件时引发该Changed事件,而不是在用户移动或创建文件时引发该事件。我尝试使用该ChangeType属性来检查它实际上是一个Changed事件还是一个Created事件,但令我惊讶的是,ChangeType Changed即使在移动或创建文件时,也会为 Change 事件引发,而不是ChangeType Created(应该是其中一种类型) 。
所以我不知道如何检查更改事件实际上是由文件编辑触发的,而不是文件创建或移动...
有任何想法吗?
背景信息:我正在使用服务中实现的FileSystemWatcher类来监视文件中的更改.下面是触发onCreate事件时抛出Argument Exception(Path不是合法形式)的编码部分.
FileMonitor.CS
public partial class FileMonitor:ServiceBase
{
public FileSystemWatcher Watcher = new FileSystemWatcher();
Private void FileWatcher()
{
FileActionHandler ActionHandler = new FileActionHandler();
Watcher.Created += new FileSystemEventHandler(ActionHandler.onCreate);
Watcher.Deleted += new FileSystemEventHandler(ActionHandler.onDelete);
Watcher.Renamed += new RenamedEventHandler(ActionHandler.onRenamed);
Watcher.EnableRaisingEvents = true;
}
}
Run Code Online (Sandbox Code Playgroud)
FileActionHandler.CS
class FileActionHandler
{
FileMonitor FileMon = new FileMonitor();
public void onCreate/onRename/onDelete(object source, FileSystemEventArgs e)
{
try
{
FileMon.Watcher.EnableRaisingEvents = false;
}
catch
{
/* Exception Code */
}
finally
{
FileMon.Watcher.EnableRaisingEvents = true;
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题:任何人都可以告诉我为什么抛出异常以及如何解决它?
我有一个文件夹(让我们称之为folder1)连续添加新文件.我为folder1中的每个文件维护一个日志文件(包含文件的完整路径和大小).我将使用此日志文件将文件从folder1复制到folder2.
这是一个连续的过程,我将编写一个Windows服务,但这是以后的.
首先,我想的是有一个定时器/文件系统观察器,它将监视文件夹并查找更改,并在事件循环中通过folder1中的文件列表,并将fileinfo(即文件路径和大小)添加到我的日志中文件(这将是一个普通的.txt文件).
我的问题是这是一种有效的方法吗?有快速或有效的方法吗?
任何反馈或建议表示赞赏.
如果这个问题太简单,我很抱歉,我是这个主题的新手。
我正在创建一些文件,需要等到它们完成或直到经过一段时间(这就是我所说的超时)。
FileSystemWatcher 非常适合“等到它们完成”,但我看不到控制其寿命的参数。
使用Tread.Sleep似乎违背了目的 (?) - 如果它的使用是正确的,则FileSystemWatcher不会存在,我们只会Tread.Sleep while !File.Exists.
那么,实现它最简单的正确方法是什么?谢谢。
我可以在主UI线程上获得filesystemwatcher事件吗?目前,文件更改将在其自己的线程上触发.
所以我的理解是,每当使用实现IDisposable的类时,它的父级也需要实现IDisposable接口。(使用FileSystemWatcher的FileWatcher)
因此,在使用FileSystemWatcher时,处置FileSystemWatcher的正确方法是什么?我希望在关闭应用程序之前不处理/(监视)FileWatcher。
我会使用“负责任的所有者模式”吗(尝试/最终)还是其他?我的FileWatcher是否也应该实现IDisposable?我将无法使用using {},因为此fileWatcher应该在应用程序整个运行过程中监视文件的更改。处理这种情况的正确方法是什么?
public class FileWatcher : IFileWatcher
{
private FileSystemWatcher watcher;
public event EventHandler<EventArgs> SettingsChanged;
public FileWatcher(bool start)
{
this.RegisterForChanges();
}
public void OnChanged(object source, EventArgs e)
{
if (this.SettingsChanged != null)
{
this.SettingsChanged(source, new EventArgs());
}
}
private void RegisterForChanges()
{
/// more code here etc
...
this.watcher = new FileSystemWatcher
{
Path = directory,
NotifyFilter =
NotifyFilters.LastAccess | NotifyFilters.LastWrite
| NotifyFilters.FileName | NotifyFilters.DirectoryName,
Filter = fileName
};
// Add event handlers.
this.watcher.Changed += this.OnChanged;
// Begin …Run Code Online (Sandbox Code Playgroud) FileSystemWatcher:如何仅为目录中的新文件引发事件?
我有一个目录,我的服务扫描.我使用FileSystemWatcher:
构造函数:
if(Directory.Exists(_dirPath))
{
_fileSystemWatcher = new FileSystemWatcher(_dirPath);
}
Run Code Online (Sandbox Code Playgroud)
然后,我在目录上订阅:
public void Subscribe()
{
try
{
//if (_fileSystemWatcher != null)
//{
// _fileSystemWatcher.Created -= FileSystemWatcher_Created;
// _fileSystemWatcher.Dispose();
//}
if (Directory.Exists(_dirPath))
{
_fileSystemWatcher.EnableRaisingEvents = true;
_fileSystemWatcher.Created += FileSystemWatcher_Created;
_fileSystemWatcher.Filter = "*.txt";
}
}
Run Code Online (Sandbox Code Playgroud)
但是,问题是我想在新文件创建(或复制)时获取事件.相反,我从该目录中的所有文件中获取事件已经存在.
如何仅从新文件中获取事件?谢谢!