private void CreateFilesInFolder(string folder, int folderDepth) { // Create files for (int fileCounter = 1; fileCounter <= Config.FilesPerFolder; fileCounter++) { string filePath = FileEx.CombinePath(folder, $"TestFile-{fileCounter}.tmp"); WriteFile(filePath); } // Stop recursion if (folderDepth == 0) { return; } // Recursively create folders for (int folderCounter = 1; folderCounter <= Config.FoldersPerFolder; folderCounter++) { // Create child folder string childFolder = FileEx.CombinePath(folder, $"TestFolder-{folderCounter}"); FileEx.CreateDirectory(childFolder); // Recursively create files and folders CreateFilesInFolder(childFolder, folderDepth - 1); } }
// Tools can override the default behavior as needed public virtual bool Update(string updateFile) { // Make sure the tool folder exists and is empty string toolPath = GetToolFolder(); if (!FileEx.CreateDirectory(toolPath) || !FileEx.DeleteInsideDirectory(toolPath)) { return(false); } // Extract the update file Log.Logger.Information("Extracting {UpdateFile} ...", updateFile); return(Tools.SevenZip.UnZip(updateFile, toolPath)); }
public bool BootstrapDownload() { // Only supported on Windows if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { return(false); } // Make sure that the Tools folder exists if (!Directory.Exists(Tools.GetToolsRoot())) { Log.Logger.Warning("Creating missing Tools folder : \"{ToolsRoot}\"", Tools.GetToolsRoot()); if (!FileEx.CreateDirectory(Tools.GetToolsRoot())) { return(false); } } // Download 7zr.exe in the tools root folder // https://www.7-zip.org/a/7zr.exe Log.Logger.Information("Downloading \"7zr.exe\" ..."); string sevenZr = Tools.CombineToolPath("7zr.exe"); const string sevenZrUrl = "https://www.7-zip.org/a/7zr.exe"; if (!Download.DownloadFile(new Uri(sevenZrUrl), sevenZr)) { return(false); } // Get the latest version of 7z if (!GetLatestVersionWindows(out MediaToolInfo mediaToolInfo)) { return(false); } // Download the lastest version in the tools root folder Log.Logger.Information("Downloading \"{FileName}\" ...", mediaToolInfo.FileName); string updateFile = Tools.CombineToolPath(mediaToolInfo.FileName); if (!Download.DownloadFile(new Uri(mediaToolInfo.Url), updateFile)) { return(false); } // Follow the pattern from Update() // Use 7zr.exe to extract the archive to the tools folder Log.Logger.Information("Extracting {UpdateFile} ...", updateFile); string extractPath = Tools.CombineToolPath(Path.GetFileNameWithoutExtension(updateFile)); string commandline = $"x -aoa -spe -y \"{updateFile}\" -o\"{extractPath}\""; int exitCode = ProcessEx.Execute(sevenZr, commandline); if (exitCode != 0) { Log.Logger.Error("Failed to extract archive : ExitCode: {ExitCode}", exitCode); return(false); } // Delete the tool destination directory string toolPath = GetToolFolder(); if (!FileEx.DeleteDirectory(toolPath, true)) { return(false); } // Rename the folder // E.g. 7z1805-extra to .\Tools\7Zip return(FileEx.RenameFolder(extractPath, toolPath)); }
public int Run() { // Result file FileIterationResultFile resultFile = new FileIterationResultFile(Config.ResultFile); ConsoleEx.WriteLine($"Writing results to : \"{resultFile.FileName}\""); resultFile.WriteHeader(); ConsoleEx.WriteLine(""); // Run the test for each of the target folders int result = 0; foreach (string target in Config.Targets) { // Clear target directory ConsoleEx.WriteLine($"Starting CreateTest for \"{target}\""); if (!FileEx.CreateDirectory(target) || !FileEx.DeleteInsideDirectory(target)) { resultFile.AddFailedResult(Config, target); ConsoleEx.WriteLineError($"Failed to create or clear target \"{target}\""); ConsoleEx.WriteLine(""); // Next target result = -1; continue; } // Recursively create files and folders Stopwatch timer = new Stopwatch(); timer.Start(); CreateFilesInFolder(target, Config.FolderDepth); timer.Stop(); TimeSpan createTime = timer.Elapsed; ConsoleEx.WriteLine($"CreateTest Time : {createTime}"); ConsoleEx.WriteLine(""); // Recursively read files and folders ConsoleEx.WriteLine($"Starting ReadTest for \"{target}\""); timer.Restart(); ReadFilesInFolder(target, out int folderCount, out int fileCount); timer.Stop(); TimeSpan readTime = timer.Elapsed; ConsoleEx.WriteLine($"ReadTest Time : {readTime}, Folder Count : {folderCount}, File Count : {fileCount}"); ConsoleEx.WriteLine(""); // Clear target directory ConsoleEx.WriteLine($"Starting DeleteTest for \"{target}\""); timer.Restart(); FileEx.DeleteInsideDirectory(target); timer.Stop(); TimeSpan deleteTime = timer.Elapsed; ConsoleEx.WriteLine($"DeleteTest Time : {deleteTime}"); ConsoleEx.WriteLine(""); // Write result resultFile.AddResult(Config, target, folderCount, fileCount, createTime, readTime, deleteTime); } return(result); }