tarleaa
15 years agoContributor
Compare two folders
Hello, is there a way in TC to compare 2 folders? I know that 2 files can be compared, but how about folders? Thanks, Andrei
function CompareFolders(left, right)
{
//ensure arguments are not null
if(!isValid(left) || !isValid(right)) { return false; }
//verify arguments are valid folder paths
if(!aqFileSystem.CheckAttributes(left, 16)) { return false; }
if(!aqFileSystem.CheckAttributes(right, 16)) { return false; }
//get subfolders and files
var leftSub = aqFileSystem.GetFolderInfo(left).SubFolders;
var leftFiles = aqFileSystem.GetFolderInfo(left).Files;
var rightSub = aqFileSystem.GetFolderInfo(right).SubFolders;
var rightFiles = aqFileSystem.GetFolderInfo(right).Files;
//verify file and subfolder presence
if(isValid(leftSub) != isValid(rightSub)) { return false; }
if(isValid(leftSub))
{
//verify subfolder count
if(leftSub.Count != rightSub.Count) { return false;}
for(var i = 0; i < leftSub.Count; i++)
{
//verify subfolder name and content
if(leftSub.Item(i).Name != rightSub.Item(i).Name) { return false; }
if(!CompareFolders(leftSub.Item(i).Path, rightSub.Item(i).Path)) { return false; }
}
}
if(isValid(leftFiles))
{
//verify file count
if(leftFiles.Count != rightFiles.Count) { return false; }
for(var i = 0; i < leftFiles.Count; i++)
{
var leftItem = leftFiles.Item(i);
var rightItem = rightFiles.Item(i);
//verify file name and content
if(leftItem.ShortName != rightItem.ShortName) { return false; }
if(!aqFile.Compare(leftItem.Path, rightItem.Path)) { return false; }
}
}
return true;
}
function isValid(obj)
{
if(obj == null) { return false; }
if(obj == aqObject.EmptyVariant) { return false; }
return true;
}