我有一个应用程序需要两个文件来处理数据。一个zip文件包含实际的数据,然后是一个控制文件,指示如何处理这些数据。
这些文件通过sftp下载到暂存目录。一旦zip文件完成,我就需要检查并查看控制文件是否也在那里。它们只共享命名前缀(例如100001_ABCDEF_123456.zip与100001_ABCDEF_control_file.ctl匹配)。
我正在尝试找到一种方法,等待zip文件完成下载,然后在移动文件时即时处理,同时保持目录结构,因为这对于处理的下一步很重要。
目前,我正在等待sftp工作程序完成,然后调用robocopy移动所有内容。我想要更精致的方法。
我尝试了几种方法,但结果都一样。文件下载但从未移动。由于某种原因,我无法使比较正确工作。
我尝试使用FileSystemWatcher来查找文件部分重命名为zip,但似乎错过了几次下载,并且由于某种原因,当我到达foreach搜索目录中的控制文件时,该函数就会死亡。 以下是FileSystemWatcher事件,我将其用于创建和更改。 另外下面是设置filesystemwatcher的内容。
这些文件通过sftp下载到暂存目录。一旦zip文件完成,我就需要检查并查看控制文件是否也在那里。它们只共享命名前缀(例如100001_ABCDEF_123456.zip与100001_ABCDEF_control_file.ctl匹配)。
我正在尝试找到一种方法,等待zip文件完成下载,然后在移动文件时即时处理,同时保持目录结构,因为这对于处理的下一步很重要。
目前,我正在等待sftp工作程序完成,然后调用robocopy移动所有内容。我想要更精致的方法。
我尝试了几种方法,但结果都一样。文件下载但从未移动。由于某种原因,我无法使比较正确工作。
我尝试使用FileSystemWatcher来查找文件部分重命名为zip,但似乎错过了几次下载,并且由于某种原因,当我到达foreach搜索目录中的控制文件时,该函数就会死亡。 以下是FileSystemWatcher事件,我将其用于创建和更改。 另外下面是设置filesystemwatcher的内容。
watcher.Path = @"C:\Sync\";
watcher.IncludeSubdirectories = true;
watcher.EnableRaisingEvents = true;
watcher.Filter = "*.zip";
watcher.NotifyFilter = NotifyFilters.Attributes |
NotifyFilters.CreationTime |
NotifyFilters.FileName |
NotifyFilters.LastAccess |
NotifyFilters.LastWrite |
NotifyFilters.Size |
NotifyFilters.Security |
NotifyFilters.CreationTime |
NotifyFilters.DirectoryName;
watcher.Created += Watcher_Changed;
watcher.Changed += Watcher_Changed;
private void Watcher_Changed(object sender, FileSystemEventArgs e)
{
var dir = new DirectoryInfo(e.FullPath.Substring(0, e.FullPath.Length - e.Name.Length));
var files = dir.GetFiles();
FileInfo zipFile = new FileInfo(e.FullPath);
foreach (FileInfo file in files)
{
MessageBox.Show(file.Extension);
if (file.Extension == "ctl" && file.Name.StartsWith(e.Name.Substring(0, (e.Name.Length - 14))))
{
file.CopyTo(@"C:\inp\");
zipFile.CopyTo(@"C:\inp\");
}
}
}
@"C:\Sync\"
,你设置了watcher.IncludeSubdirectories = true;
。在你的文件处理中,你将文件移动到@"C:\Sync\inp\"
。这是监视器正在监视的子目录。这会引起问题。 - Alex