/// <summary> /// 恢复已经转移的缓存文件 /// </summary> /// <param name="workerModel"></param> private void RestoreCacheFilesToPreviousPath(MoveCacheBackgroundWorkerModel workerModel) { try { foreach (var data in workerModel.MovedFiles) { File.Move(data.NewFilePath, data.PreviousFilePath); } //删除文件夹下所有的空文件夹 FolderUtil.DeleteEmptyFolder(workerModel.UserDefinedFolder, false); } catch (Exception e) { LogHelper.Error("恢复缓存失败,异常信息为:" + e.Message); } }
private void MoveCacheWidthBackgroundWorker(string currentDesktopFolder, string destDataPathFolder) { var workerModel = new MoveCacheBackgroundWorkerModel() { DeskTopFolder = currentDesktopFolder, DesktopFoldersAndFiles = FolderUtil.GetSubFoldersAndFiles(currentDesktopFolder), UserDefinedFolder = destDataPathFolder, }; using (var backgroundWorker = new BackgroundWorker() { WorkerReportsProgress = true }) { backgroundWorker.ProgressChanged += MoveCacheBackgroundWorker_ProgressChanged; backgroundWorker.DoWork += MoveCacheBackgroundWorker_DoWork; backgroundWorker.RunWorkerCompleted += MoveCacheBackgroundWorker_RunWorkerCompleted; backgroundWorker.RunWorkerAsync(workerModel); } }
private void MoveCacheFiles(List <string> allCacheFiles, ref long handledSize, MoveCacheBackgroundWorkerModel workerModel, long totalSize, BackgroundWorker worker) { var currentOperationDetail = $"正在转移。。。"; worker.ReportProgress(-1, new ProgressChangedContent() { OperationDetail = currentOperationDetail, }); var currentOperationError = string.Empty; int filesCount = allCacheFiles.Count; int moveIndex = 0; foreach (var cacheFilePath in allCacheFiles) { try { moveIndex++; handledSize += new FileInfo(cacheFilePath).Length; //移动文件 var newFilePath = GetNewFilePath(cacheFilePath, workerModel.DeskTopFolder, workerModel.UserDefinedFolder); FileUtil.Move(cacheFilePath, newFilePath); //记录已经转移的缓存文件 workerModel.MovedFiles.Add(new MovedFileDataMode(cacheFilePath, newFilePath)); //删除原有文件 FileUtil.Delete(cacheFilePath); } catch (Exception e) { LogHelper.Error(e.Message); currentOperationError = e.Message; throw; } finally { var cleanCacheProgressDetail = $"{moveIndex}/{filesCount}"; //报告进度 var progress = totalSize == 0 ? 100 : handledSize * 100 / totalSize; worker.ReportProgress(Convert.ToInt32(progress), new ProgressChangedContent() { ProgressDetail = cleanCacheProgressDetail, OperationError = currentOperationError }); } } //删除产品文件夹及其下所有的空文件夹 FolderUtil.DeleteEmptyFolder(workerModel.DeskTopFolder, false); //报告进度 worker.ReportProgress(-1, new ProgressChangedContent() { OperationOutput = $"转移完成.." }); }