use aqFile object and aqFileSystem. They work great. here are the links and some start functions if you are scripting in Javascript. If not javascript just ask chat GPT to convert the below functions into whatever script language you are using
https://support.smartbear.com/testcomplete/docs/reference/program-objects/aqfilesystem/index.html
https://support.smartbear.com/testcomplete/docs/reference/program-objects/aqfile/index.html
function GetFileSize(directory, fileName)
{
var files = aqFileSystem.FindFiles(directory, fileName);
// 1. find file
if(files !== null && files.length !== 0)
{
var size = files.Item(0).Size;
// 3. return 'number' value
return size;
}
else
{
var msg = `Could not find the file, '${fileName}', in directory, '${directory}'.`;
Log.Error(msg);
}
}
function VerifyFileSize(directory, fileName, expectedFileSize, fileSizeTolerance)
{
var actualFileSize = GetFileSize(directory, fileName);
if(Math.abs(expectedFileSize - actualFileSize) > fileSizeTolerance)
{
var difference = Math.abs(expectedFileSize - actualFileSize);
var msg = `The actual file size is not close enough to the expected file size` +
`| actual: '${actualFileSize}' | expected: '${expectedFileSize}' | ` +
`size difference: '${difference}' | desired tolerance: '${fileSizeTolerance}'.` +
`Directory: '${directory}' | fileName: '${fileName}'` ;
Log.Error(msg);
}
else
{
Log.Message('File size compare complete. File sizes matched.')
}
}
function DeleteFileIfExists(directory, fileName, checkIfSuccess = false)
{
// 1. Delete file if exists
var fullPath = StrHelper.ConcatFileNameAndPath(directory, fileName);
if(aqFileSystem.Exists(fullPath))
{
aqFile.Delete(fullPath);
}
// 2. If we need to check to see if file was deleted, check now ...
if(checkIfSuccess === true)
{
// Check to see if file was deleted?
fileWasDeleted = IsDeleted(fullPath);
if(fileWasDeleted === false)
{
Log.Warning(`File, '${fullPath}', was not deleted`);
return false;
}
else
{
return true;
}
}
return true;
}
function VerifyFileExistance(fileNameAndPath, maxWaitTimeSec)
{
var fileExists = aqFileSystem.Exists(fileNameAndPath);
// 2. Wait until file exists
var crntWaitSecond = 0;
while(!fileExists && crntWaitSecond <= maxWaitTimeSec)
{
Delay(1000);
crntWaitSecond++;
fileExists = aqFileSystem.Exists(fileNameAndPath);
}
// 3. Fail if file not found
if(!fileExists)
{
var msg = `Could not find the specified file, ${fileNameAndPath}.`;
Log.Error(msg);
}
}
function IsDeleted(fileNamepath, maxWaitTimeMiliSec = 2000)
{
var fileExists = aqFileSystem.Exists(fileNamepath);
// Wait until file or folder is deleted
var crntWaitSecondMs = 0;
while(fileExists && crntWaitSecondMs <= maxWaitTimeMiliSec)
{
Delay(200);
crntWaitSecondMs = crntWaitSecondMs + 200;
fileExists = aqFileSystem.Exists(fileNamepath);
}
return !fileExists;
}
function ReadFileIntoString(fileNameAndPath)
{
VerifyFileExistance(fileNameAndPath);
var fileString = aqFile.ReadWholeTextFile(fileNameAndPath, aqFile.ctUTF8);
return fileString;
}
function GetFileTimeStamp(baseWorkingDirectory, caseName, fileName)
{
var fileNamePath = StrHelper.Concat_BaseDirectory_FileFolder_and_FileName(baseWorkingDirectory, caseName, fileName);
VerifyFileExistance(fileNamePath, 4);
var fileTimeStamp = aqFile.GetLastWriteTime(fileNamePath);
return fileTimeStamp;
}
function GetFileTimeStampString(baseWorkingDirectory, caseName, fileName)
{
var timeStamp = GetFileTimeStamp(baseWorkingDirectory, caseName, fileName);
var timeStampString = aqConvert.DateTimeToStr(timeStamp);
return timeStampString;
}
// ************* the Below code put into a file called 'StringHelper' *************
function Concat_BaseDirectory_FileFolder_and_FileName(baseDirectory, fileFolder, fileName)
{
// base directory
baseDirectory = baseDirectory.trim();
var lastChar = baseDirectory[baseDirectory.length - 1];
if(lastChar !== "\\")
{
baseDirectory = baseDirectory + "\\";
}
// file folder
fileFolder = fileFolder.trim();
var folderFirstChar = fileFolder[0];
var folderLastChar = fileFolder[fileFolder.length - 1];
if(folderFirstChar === "\\" || folderFirstChar === "/")
{
fileFolder = fileFolder.substring(1, fileFolder.length);
}
if(folderLastChar === "\\" || folderLastChar === "/")
{
fileFolder = fileFolder.substring(0, fileFolder.length-1);
}
var fileNameAndPath = baseDirectory + fileFolder + "\\" + fileName.trim();
return fileNameAndPath;
}
function Concat_BaseDirectory_and_FileFolder(baseDirectory, fileFolder)
{
if(fileFolder === "")
{
Log.Error("The variable, 'v_TestName', cannot be empty. Please fill in and re-run.")
}
// base directory
baseDirectory = baseDirectory.trim();
var lastChar = baseDirectory[baseDirectory.length - 1];
if(lastChar !== "\\")
{
baseDirectory = baseDirectory + "\\";
}
// file folder
fileFolder = fileFolder.trim();
var folderFirstChar = fileFolder[0];
var folderLastChar = fileFolder[fileFolder.length - 1];
if(folderFirstChar === "\\" || folderFirstChar === "/")
{
fileFolder = fileFolder.substring(1, fileFolder.length);
}
if(folderLastChar === "\\" || folderLastChar === "/")
{
fileFolder = fileFolder.substring(0, fileFolder.length-1);
}
var fullPath = baseDirectory + fileFolder;
return fullPath;
}
function ConcatFileNameAndPath(directory, fileName)
{
let fileNameAndPath = directory;
let lastChar = directory[directory.length - 1];
if(lastChar !== "\\")
{
fileNameAndPath = directory + "\\" + fileName;
}
else
{
fileNameAndPath = directory + fileName;
}
return fileNameAndPath;
}