/// <summary> /// Aggregates all the supplied FILES into THE FIRST file (marking it as a TEMP file) using the supplied combineF /// action to merge all the individual files into 1 combined output file. /// </summary> /// <remarks> /// The first file is renamed to the resultFileNameTemplate, marked as a TEMP file and updated in place on the /// file system. This is more efficient because we do not make a copy of the first file, we rename the first file and /// UPDATE IT IN PLACE. This results in less file IO, which improves performance for large files. /// </remarks> /// <param name="files">The sequence of files to combine into 1 file.</param> /// <param name="resultFileNameTemplate">The template string to use for the name of the combined file.</param> /// <param name="combineF"> /// Action to combine 2 files into 1. /// combineF :: (accumulator: TempFile, inputFile: TempFile) -> unit. /// </param> /// <returns>A TempFile instance for the new combined file.</returns> public TempFile AggregateFilesIntoFirstAsTemp(IEnumerable <TempFile> files, string resultFileNameTemplate, Action <TempFile, TempFile> combineF) { if (files.IsEmpty()) { TempFile accumulatorFile = NewTempFile(resultFileNameTemplate); accumulatorFile.CreateIfNotExists(); return(accumulatorFile); } if (files.Count() == 1) { TempFile accumulatorFile = files.Single(); accumulatorFile.Rename(resultFileNameTemplate); accumulatorFile.MakeTemporary(); return(accumulatorFile); } { TempFile accumulatorFile = files.First(); accumulatorFile.Rename(resultFileNameTemplate); accumulatorFile.MakeTemporary(); files.Skip(1).Each(file => combineF(accumulatorFile, file)); return(accumulatorFile); } }
/// <summary> /// Aggregates all the supplied FILES into a separate TEMP file using the supplied combineF action to merge all /// the individual files into 1 combined output file. /// </summary> /// <param name="files">The sequence of files to combine into 1 file.</param> /// <param name="resultFileNameTemplate">The template string to use for the name of the combined file.</param> /// <param name="combineF"> /// Action to combine 2 files into 1. /// combineF :: (accumulator: TempFile, inputFile: TempFile) -> unit. /// </param> /// <returns>A TempFile instance for the new combined file.</returns> public TempFile AggregateFilesIntoTemp(IEnumerable <TempFile> files, string resultFileNameTemplate, Action <TempFile, TempFile> combineF) { TempFile accumulatorFile = NewTempFile(resultFileNameTemplate); if (files.IsEmpty()) { accumulatorFile.CreateIfNotExists(); return(accumulatorFile); } if (files.Count() == 1) { files.First().CopyTo(accumulatorFile); return(accumulatorFile); } TempFile firstFile = files.ElementAt(0); firstFile.CopyTo(accumulatorFile); files.Skip(1) .ToList() .ForEach(file => combineF(accumulatorFile, file)); return(accumulatorFile); }
public TempFile AggregateFilesInto(IEnumerable <TempFile> files, TempFile accumulatorFile, Action <TempFile, IEnumerable <TempFile> > combineF) { if (files.IsEmpty()) { accumulatorFile.CreateIfNotExists(); return(accumulatorFile); } if (files.Count() == 1) { files.First().CopyTo(accumulatorFile); return(accumulatorFile); } combineF(accumulatorFile, files); return(accumulatorFile); }
public TempFile AggregateFilesIntoPerma(IEnumerable <TempFile> files, string resultFileNameTemplate, Action <TempFile, IEnumerable <TempFile> > combineF) { TempFile accumulatorFile = NewPermaFile(resultFileNameTemplate); if (files.IsEmpty()) { accumulatorFile.CreateIfNotExists(); return(accumulatorFile); } if (files.Count() == 1) { files.First().CopyTo(accumulatorFile); return(accumulatorFile); } combineF(accumulatorFile, files); return(accumulatorFile); }