private bool DeleteDirectoryAtDestination(object context) { DirectoryDeletionInfo delInfo = (DirectoryDeletionInfo)context; this.DeleteDirectoryIfOld(delInfo); return(true); }
private void DeleteDirectoryIfOld(DirectoryDeletionInfo delInfo) { DirectoryInfo dirInfo = new DirectoryInfo(delInfo.DirName); if (dirInfo.LastWriteTimeUtc.CompareTo(delInfo.CutoffTime) < 0) { FabricDirectory.Delete(delInfo.DirName, true); } }
private void DeleteFilesFromSubFolders( string folder, DestinationOperationPerformer destinationOperationPerformer, List <FolderDeletionInfo> folderList, IsOkToDeleteFile isOkToDelete) { // Figure out the timestamp before which all files will be deleted DateTime cutoffTime = DateTime.UtcNow.Add(-this.fileDeletionAge); foreach (FolderDeletionInfo folderInfo in folderList) { if (this.stopping) { this.traceSource.WriteInfo( this.logSourceId, "The consumer is being stopped. Therefore, no more files from folder {0} will be deleted.", folder); break; } DeleteFilesData deletionData = new DeleteFilesData(); deletionData.DestinationOperationPerformer = destinationOperationPerformer; deletionData.FolderInfo = folderInfo; deletionData.CutoffTime = cutoffTime; deletionData.IsOkToDelete = isOkToDelete; try { Utility.PerformIOWithRetries( this.DeleteFilesFromFolder, deletionData); } catch (Exception e) { this.traceSource.WriteExceptionAsError( this.logSourceId, e, "Unable to enumerate files in folder {0} while attempting to delete old files.", folderInfo.FolderName); continue; } if (null != this.OnFolderEnumerated) { this.OnFolderEnumerated(this, EventArgs.Empty); } // We want to delete the directory if it is empty and if it is // not the root directory. if (false == folder.Equals( folderInfo.FolderName, StringComparison.OrdinalIgnoreCase)) { // This is not the root directory. Try to delete it. If the // directory is not empty, an IOException is thrown. We handle // the exception and move on. try { DirectoryDeletionInfo delInfo = new DirectoryDeletionInfo() { DirName = folderInfo.FolderName, CutoffTime = cutoffTime }; if (null != destinationOperationPerformer) { // Folder is at the destination. So we might need to impersonate. destinationOperationPerformer( this.DeleteDirectoryAtDestination, delInfo); } else { // Folder is not at the destination. No need to impersonate. this.DeleteDirectoryIfOld(delInfo); } if (null != this.OnFolderDeleted) { this.OnFolderDeleted(this, EventArgs.Empty); } } catch (Exception e) { if (false == ((e is FabricException) || (e is IOException))) { throw; } } } } }