/// <see cref="IIntegerFileCreator.CreateIntegerTextFile(IEnumerable{int}, string)"/> public void CreateIntegerTextFile(IEnumerable <int> integers, string filePath) { //Create the directory the file will be living in, if it does not already exist fileIO.CreateDirectory(fileIO.GetDirectoryFromFilePath(filePath)); //Create the file using (Stream fileStream = fileIO.CreateFile(filePath)) { //Create a stream writer from the file stream using (StreamWriter fileStreamWriter = new StreamWriter(fileStream)) { //Iterate over each integer and write it to the file foreach (int integer in integers) { fileIO.WriteIntegerToStream(fileStreamWriter, integer); } //Flush the stream writer fileStreamWriter.Flush(); } } }
/// <summary> /// Merges an input file group into a single output file /// </summary> /// <param name="fileGroup">The names of the input files to be merged</param> /// <param name="outputDirectory">The directory the output file is to be written in</param> /// <param name="fileTemplate">The template for the output file</param> /// <param name="fileGroupNumber">The file group number</param> /// <param name="updateProgress">A method that will be called to update chunk file creation progress. The /// number of integers that have been merged so far in the file group will be passed to this method /// whenever an integer is merged.</param> /// <returns>The path of the output file that was written</returns> private string MergeInputFileGroup(List <string> fileGroup, string outputDirectory, string fileTemplate, int fileGroupNumber, Action <int> updateProgress = null) { //Create the input stream readers List <StreamReader> inputStreamReaders = fileGroup .Select(file => fileIO.CreateFileStreamReader(file)) .ToList(); //Create the output file and output file stream writer string outputFilePath = Path.Combine(outputDirectory, string.Format(fileTemplate, fileGroupNumber)); using (Stream outputFileStream = fileIO.CreateFile(outputFilePath)) using (StreamWriter outputStreamWriter = new StreamWriter(outputFileStream)) { //Merge the input streams into the output stream integerStreamMerger.MergeIntegerStreams(inputStreamReaders, outputStreamWriter, updateProgress); } //Close the input stream readers inputStreamReaders.ForEach(inputStreamReader => inputStreamReader.Close()); return(outputFilePath); }