예제 #1
0
        /// <summary>
        /// Transform a file that contains source records to an array of the destination type
        /// </summary>
        /// <param name="sourceFile">A file containing the source records.</param>
        /// <returns>The transformed records.</returns>
        public TDestination[] ReadAndTransformRecords(string sourceFile)
        {
            var engine = new FileHelperAsyncEngine <TSource>(mSourceEncoding)
            {
                ErrorMode = this.ErrorMode
            };

            mSourceErrorManager      = engine.ErrorManager;
            mDestinationErrorManager = new ErrorManager(ErrorMode);

            var res = new List <TDestination>();

            engine.BeginReadFile(sourceFile);
            foreach (var record in engine)
            {
                res.Add(record.TransformTo());
            }
            engine.Close();

            return(res.ToArray());
        }
예제 #2
0
        private FileHelperAsyncEngine <T> SplitAndSortParts(string file, List <string> res)
        {
            int partNumber = 1;

            var lines = new List <T>();

            try
            {
                long writtenBytes     = 0;
                long lastWrittenBytes = 0;
                var  readEngine       = new FileHelperAsyncEngine <T>(Encoding);

                readEngine.Progress += (sender, e) => writtenBytes = e.CurrentBytes;

                using (readEngine.BeginReadFile(file, EngineBase.DefaultReadBufferSize * 2))
                {
                    foreach (var item in readEngine)
                    {
                        lines.Add(item);

                        if ((writtenBytes - lastWrittenBytes) > BlockFileSizeInBytes)
                        {
                            WritePart(file, lines, partNumber, res);
                            partNumber++;
                            lastWrittenBytes = writtenBytes;
                        }
                    }
                }

                return(readEngine);
            }
            finally
            {
                if (lines.Count > 0)
                {
                    WritePart(file, lines, partNumber, res);
                }
            }
        }