public bool Equal(FileInfoEx fileB, FileCompareFlags flags) { FileCompareFlags equalFlags = (this.FileName == fileB.FileName) ? FileCompareFlags.UnrootedName : 0; equalFlags |= this.FileInfoObj.EqualityFlags(fileB.FileInfoObj, flags); return(equalFlags == flags); }
//-------------------------------------------------------------------------------- public static FileCompareFlags EqualityFlags(this FileInfo fileA, FileInfo fileB, FileCompareFlags flags) { FileCompareFlags equalFlags = FileCompareFlags.All; equalFlags |= (FlagIsSet(flags, FileCompareFlags.Attributes) && fileA.Attributes == fileB.Attributes) ? FileCompareFlags.Attributes : 0; equalFlags |= (FlagIsSet(flags, FileCompareFlags.Created) && fileA.CreationTime == fileB.CreationTime) ? FileCompareFlags.Created : 0; equalFlags |= (FlagIsSet(flags, FileCompareFlags.CreatedUTC) && fileA.CreationTimeUtc == fileB.CreationTimeUtc) ? FileCompareFlags.CreatedUTC : 0; equalFlags |= (FlagIsSet(flags, FileCompareFlags.Extension) && fileA.Extension == fileB.Extension) ? FileCompareFlags.Extension : 0; equalFlags |= (FlagIsSet(flags, FileCompareFlags.LastAccess) && fileA.LastAccessTime == fileB.LastAccessTime) ? FileCompareFlags.LastAccess : 0; equalFlags |= (FlagIsSet(flags, FileCompareFlags.LastAccessUTC) && fileA.LastAccessTimeUtc == fileB.LastAccessTimeUtc) ? FileCompareFlags.LastAccessUTC : 0; equalFlags |= (FlagIsSet(flags, FileCompareFlags.LastWrite) && fileA.LastWriteTime == fileB.LastWriteTime) ? FileCompareFlags.LastWrite : 0; equalFlags |= (FlagIsSet(flags, FileCompareFlags.LastWriteUTC) && fileA.LastWriteTimeUtc == fileB.LastWriteTimeUtc) ? FileCompareFlags.LastWriteUTC : 0; equalFlags |= (FlagIsSet(flags, FileCompareFlags.Length) && fileA.Length == fileB.Length) ? FileCompareFlags.Length : 0; equalFlags |= (FlagIsSet(flags, FileCompareFlags.FullName) && fileA.FullName == fileB.FullName) ? FileCompareFlags.FullName : 0; return(equalFlags); }
//-------------------------------------------------------------------------------- /// <summary> /// Determines if the specified file is "equal" to this file, bsased on the /// specified comparison properties /// </summary> /// <param name="fileB">The file to be compared</param> /// <param name="flags">The properties to be compared for equality</param> /// <returns></returns> public bool Equal(FileInfoEx fileB, FileCompareFlags flags) { // assume no matches FileCompareFlags equalFlags = 0; // first, we compare the unrooted name (the filename without the // root from/to path) if ((flags & FileCompareFlags.UnrootedName) == FileCompareFlags.UnrootedName) { equalFlags = (this.FileName == fileB.FileName) ? FileCompareFlags.UnrootedName : 0; } // and then we compare the actual FileInfo properties equalFlags |= this.FileInfoObj.EqualityFlags(fileB.FileInfoObj, flags); // if the flags that are set here are equal to the flags specified, this // method will return true return(equalFlags == flags); }
public bool NewOrChanged(FileInfoEx newFile) { var newCount = (from oldFile in this where oldFile.FileName == newFile.FileName select oldFile).Count(); bool isNew = (newCount == 0); FileCompareFlags flags = FileCompareFlags.UnrootedName | FileCompareFlags.LastWrite | FileCompareFlags.Length; var oldCount = (from oldFile in this //where ((oldFile.FileName == newFile.FileName) && (oldFile.FileInfoObj.LastWriteTime != newFile.FileInfoObj.LastWriteTime || oldFile.FileInfoObj.Length != newFile.FileInfoObj.Length)) where oldFile.Equal(newFile, flags) select oldFile).Count(); bool isChanged = (oldCount > 0); return(isNew || isChanged); }
//-------------------------------------------------------------------------------- public static bool Equal(this FileInfo fileA, FileInfo fileB, FileCompareFlags flags) { bool isEqual = (fileA.EqualityFlags(fileB, flags) == flags); return(isEqual); }
////////////////////////////////////////////////////////////////////////////////// // FileInfo methods //-------------------------------------------------------------------------------- private static bool FlagIsSet(FileCompareFlags flags, FileCompareFlags flag) { bool isSet = ((flags & flag) == flag); return(isSet); }