If you need to track whether a particular file has changed or not (and I am not talking about FileSystemWatcher, often it’s an overkill), one way is to compare file’s LastWriteTime
against stored value. But if you store the date value in SQL Server you may be in for a surprise – even if file date hasn’t changed – dates will not compare as equal. Consider following example:
'Reading current system file date/time Dim dCurrentFileDate As DateTime = File.GetLastWriteTime(sFilePath) 'Storing file date/time in SQL Server table CMyDatabaseClass.SaveDate(sFilePath, dCurrentFileDate) 'Immediately reading date/time value back Dim dStoredFileDate As DateTime = CMyDatabaseClass.LoadDate(sFilePath) 'Comparing stored value against current If dCurrentFileDate = dStoredFileDate ' End If
The If
statement on Line 11 will produce False
results even if the dates seem identical. The reason – millisecond part of the datetime. SQL Server and .NET disagree on how to treat it so the best thing to do is to strip milliseconds from system file date/time before storing it or comparing against stored value.
Joe from StackOverflow.com offers a very elegant solution. That solution is in C# and here it is converted to VB.NET. To apply it to the example above simple add after the second line:
dCurrentFileDate = dCurrentFileDate.Value.AddTicks(-(dCurrentFileDate.Value.Ticks Mod TimeSpan.TicksPerSecond))
This will remove milliseconds from the date/time value and next time if you compare to the same value – values will be really equal.