我有一个具有以下结构的文件夹
Parent/
Child1/
GrandChild1/
File1.txt
Run Code Online (Sandbox Code Playgroud)
我需要查询父文件夹并找出 Child1 是否已更改。
已更改 = 添加/更新/删除了新文件。
Child1 文件夹 DateModified 未更新。发生更改时,仅更新 GrandChild1 修改日期。我试图避免进入文件级别来确定 rootparent 是否已更改。因为会有很多文件夹和子文件夹。我只需要知道 Child1 是否已更改。
我不想使用 FileSystemWatcher,因为我将此作为计划作业运行,而不是实时观看。
我正在开发一个需要使用FileSystemWatcher该类的C#程序,以便在创建新文件时通知它.作为初始化的一部分,程序扫描目录,以便它可以处理其中已存在的任何文件.这一切都很好.
但是,在与另一位开发人员的讨论中,我们开始质疑这是否始终有效.是否存在FileSystemWatcher错过创建文件的条件?如果是这样,这些条件是什么?
为了处理这种情况,我们只是在初始化过程中运行代码,定期扫描目录,但是FileSystemWatcher错过文件的可能性有多大?
我在这里和其他网站浏览了不少线程,以解决这个问题.
这是我的FileMonitor类:
class FileMonitor
{
public FileMonitor(String path)
{
try
{
var watcher = new FileSystemWatcher()
{
Path = path,
IncludeSubdirectories = true,
InternalBufferSize = 65536,
EnableRaisingEvents = true
};
watcher.Changed += new FileSystemEventHandler(OnFileChanged);
watcher.Created += new FileSystemEventHandler(OnFileCreated);
watcher.Deleted += new FileSystemEventHandler(OnFileDeleted);
watcher.Renamed += new RenamedEventHandler(OnFileRenamed);
watcher.Error += new ErrorEventHandler(OnWatcherError);
}
catch (Exception)
{
throw;
}
}
private void OnWatcherError(object sender, ErrorEventArgs e)
{
}
private void OnFileChanged(object sender, FileSystemEventArgs e)
{
try
{
((FileSystemWatcher)sender).EnableRaisingEvents = false;
LogFileSystemChanges(e);
}
finally …Run Code Online (Sandbox Code Playgroud) 我已经为一个文件夹实现了FileSystemWatcher,该文件夹驻留在NetworkStorage设备上(没有操作系统).
场景是,我们有两台机器说机器A和机器B.我的应用程序在我的表单Button1和Button2上有两个按钮.我编写了重命名Test.txt文件的代码.
Button1:将文件Test.txt重命名为Test007.txt和Button2:将文件Test007.txt重命名为Test.txt
假设我同时运行了A和B的tis exe文件.然后我可以通过从机器A按下Button1来重命名文件,现在如果我试图从另一台机器B重命名该文件,那么它会给出错误
"System.ComponentModel.Win32Exception:指定的服务器无法执行请求的操作"
任何人都有任何想法...请帮助我们找到解决方案.我们拥有该文件夹的适当权限.
注意:代码也适用于LAN文件夹,因此代码是完美的.它不适用于NetworkStoreDevice.
例如,您知道该功能,C:\test.txt如果您在另一个编辑器中也有相同的文件,并且在那里编辑它,则在您返回时,应用程序将提示文件已更改,无论您是否要更新它.如何检查文件是否已更新?
UPDATE
问一个姐妹问题" 使用FileSystemWatcher来监视文件的变化 "
我目前正在尝试让 FileSystemWatcher 工作,如这个问题中所述。在我的研究过程中,我在这个网站上发现了很多描述此类不可靠性的答案和评论。相反,在某些地方提到“轮询”作为观察变化的方法,例如在这个(非常旧的)答案中。我的问题是这到底意味着什么。
我有以下代码用于监视文本文件的目录,该目录每天两次获取新文件,代码工作正常,但之后它停止触发OnCreated事件...
[PermissionSet(SecurityAction.Demand, Name="FullTrust")]
public static void Run()
{
FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Path = @"c:\users\documents\";
watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
| NotifyFilters.FileName | NotifyFilters.DirectoryName;
watcher.Filter = "*.txt";
// Add event handlers.
watcher.Created += new FileSystemEventHandler(OnCreated);
// 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');
}
private static void OnCreated(object source, FileSystemEventArgs e)
{
Console.WriteLine("File: " + e.FullPath + " " + e.ChangeType);
}
Run Code Online (Sandbox Code Playgroud)
无法弄清楚这个问题.
此外,我想知道一个简单的替代品(如果有的话),因为我没有找到这个可靠..
可能重复:
C#循环访问文件夹,直到找到正确的文件
是否可以使用c#轮询来监视"必需"文件的文件夹?我正在运行批处理文件,该文件要求某些文件位于该文件夹中.如果文件不存在,批处理作业将自动取消.我只是想知道我是否可以使用ploling监视文件夹,一旦它们可用,我希望批处理文件继续.谢谢