我正在尝试自动清理遗留/遗产代码,我可以从IIS日志中识别当前使用的资源,但.ASP和.PHP等服务器端页面包含我希望能够通过代码识别的链(C#)
为了缩小问题范围,因为它过于宽泛......
我有代码读取IIS日志文件,我已经识别了所有静态服务资源,包括初始.ASP或.PHP页面。
我需要一些附带的C#代码来详细说明在服务器上处理的任何.ASP或.PHP文件,因此不会出现在IIS日志中。
碰巧我找到了解决方案并在下面提供了答案。
我希望这是足够的细节,以便暂停'暂停'
答案 0 :(得分:0)
非常感谢@Progrock指示我检查目标文件夹中文件的上次访问时间。这就是我必须要做的事情。
确保Windows正在设置捕获上次访问的时间(请参阅Directory.GetFiles keeping the last access time)
Process.Start("fsutil", "behavior set disablelastaccess 0").WaitForExit();
还需要重启IIS以停止任何缓存在内存文件中
Process.Start("IISRESET").WaitForExit();
需要对FileInfo进行刷新,以确保获得正确的上次访问时间(请参阅How can System.IO.FileSystemInfo.Refresh be used)。
这导致以下代码...
var start = DateTime.UtcNow;
Process.Start("fsutil", "behavior set disablelastaccess 0").WaitForExit();
Process.Start("IISRESET").WaitForExit();
//do work that will access folder. i.e. access IIS web pages
var files = Directory.GetFiles(iisPath, "*.*", SearchOption.AllDirectories).ToList();
files = files.Where(x =>
{
var fileInfo = new FileInfo(x);
fileInfo.Refresh();
return fileInfo.LastAccessTimeUtc >= start;
}).ToList();
我可以使用此文件列表来识别所有.ASP和.PHP以及在页面请求时通过IIS服务器访问的任何其他文件。