diff --git a/PROMS/Volian.Controls.Library/StepTabRibbon.cs b/PROMS/Volian.Controls.Library/StepTabRibbon.cs index e42a8de4..d7ca55b9 100644 --- a/PROMS/Volian.Controls.Library/StepTabRibbon.cs +++ b/PROMS/Volian.Controls.Library/StepTabRibbon.cs @@ -916,9 +916,33 @@ namespace Volian.Controls.Library string rofstPath = rdi.FolderPath + @"\ro.fst"; if (!File.Exists(rofstPath)) return false; FileInfo fiRofst = new FileInfo(rofstPath); - if (roFstInfo.DTS == fiRofst.LastWriteTime) return false; - if (roFstInfo.DTS > fiRofst.LastWriteTime) return false; - return true; + + // if the database Ro.Fst is newer or if the files have identical DTS, + // assume that they are the same file. + if (roFstInfo.DTS >= fiRofst.LastWriteTime) return false; + + // next see if the data is the same size, i.e. byte count of record and byte count + // of file. If different sizes, the date/time stamp check will hold. + if (fiRofst.Length != roFstInfo.ROLookup.Length) return fiRofst.LastWriteTime > roFstInfo.DTS; + + // if we can't tell by the DTS or size, compare the contents. Get all of the rodb's + // rofsts of the size of the file & compare bytes. If + ROFstInfoList fstList = ROFstInfoList.GetBySize(rdi.RODbID, (int)fiRofst.Length); + if (fstList.Count > 0) + { + FileStream fsIn = new FileStream(rofstPath, FileMode.Open, FileAccess.Read, FileShare.Read); + // Create an instance of StreamReader that can read characters from the FileStream. + BinaryReader r = new BinaryReader(fsIn); + byte[] ab = r.ReadBytes((int)fsIn.Length); + fsIn.Close(); + foreach (ROFstInfo irofst in fstList) + { + // compare contents by comparing each byte. + for (int i = 0; i < fiRofst.Length; i++) + if (ab[i] != irofst.ROLookup[i]) return true; + } + } + return false; } public void SetUpdRoValBtn(bool en) {