protected override void Dispose(bool disposing) { _fileHandler?.Dispose(); _isOpen = false; base.Dispose(disposing); }
protected override async Task <object[]> ReadRecord(CancellationToken cancellationToken) { while (true) { object[] row; try { row = await _fileHandler.GetRow(_baseRow); } catch (Exception ex) { throw new ConnectionException("The flatfile reader failed with the following message: " + ex.Message, ex); } if (row == null) { _fileHandler.Dispose(); } return(row); } }
protected override async Task <object[]> ReadRecord(CancellationToken cancellationToken) { while (true) { object[] row; try { row = await _fileHandler.GetRow(_baseRow); } catch (Exception ex) { throw new ConnectionException("The flatfile reader failed with the following message: " + ex.Message, ex); } if (row == null) { _fileHandler.Dispose(); // If we are managing files, then move the file after the read is finished. // if this is preview mode, don't move files. if (CacheFlatFile.AutoManageFiles && _previewMode == false) { try { await _fileConnection.MoveFile(CacheFlatFile, EFlatFilePath.Incoming, EFlatFilePath.Processed, _files.Current.FileName); //backup the completed file } catch (Exception ex) { throw new ConnectionException($"Failed to move the file {_files.Current.FileName} from the incoming to processed directory. {ex.Message}", ex); } } if (_files.MoveNext() == false) { _isOpen = false; } else { try { var fileStream = await _fileConnection.GetReadFileStream(CacheFlatFile, EFlatFilePath.Incoming, _files.Current.FileName); if (_fileNameOrdinal >= 0) { _baseRow[_fileNameOrdinal] = _files.Current.FileName; } await _fileHandler.SetStream(fileStream, _selectQuery); } catch (Exception ex) { throw new ConnectionException($"Failed to read the file {_files.Current.FileName}. {ex.Message}", ex); } try { row = await _fileHandler.GetRow(_baseRow); } catch (Exception ex) { throw new ConnectionException($"Flat file reader failed during the reading the file {_files.Current.FileName}. {ex.Message}", ex); } if (row == null) { return(await ReadRecord(cancellationToken)); // this creates a recurive loop to cater for empty files. } } } return(row); } }