public byte[] ToByteDAT(DataFileType dataFileType, IReadOnlyList <AnalogChannelInformation> analogInformations) { var result = new byte[DataFileHandler.GetByteCount(this.AnalogValues.Length, this.DigitalValues.Length, dataFileType)]; int analogOneChannelLength = dataFileType == DataFileType.Binary ? 2 : 4; int digitalByteStart = 8 + analogOneChannelLength * this.AnalogValues.Length; System.BitConverter.GetBytes(this.Number).CopyTo(result, 0); System.BitConverter.GetBytes(this.Timestamp).CopyTo(result, 4); switch (dataFileType) { case DataFileType.Binary: this.AnalogsToBinaryDAT(result, analogInformations); break; case DataFileType.Binary32: this.AnalogsToBinary32DAT(result, analogInformations); break; case DataFileType.Float32: this.AnalogsToFloat32DAT(result); break; default: throw new InvalidOperationException("Not supported file type DAT"); } this.DigitalsToDAT(result, digitalByteStart); return(result); }
internal DataFileHandler(string fullPathToFileDAT, ConfigurationHandler configuration) { int samplesCount = configuration.SampleRates[configuration.SampleRates.Count - 1].LastSampleNumber; this.Samples = new DataFileSample[samplesCount]; if (configuration.DataFileType == DataFileType.Binary || configuration.DataFileType == DataFileType.Binary32 || configuration.DataFileType == DataFileType.Float32) { var fileContent = System.IO.File.ReadAllBytes(fullPathToFileDAT); int oneSampleLength = DataFileHandler.GetByteCount(configuration.AnalogChannelsCount, configuration.DigitalChannelsCount, configuration.DataFileType); for (int i = 0; i < samplesCount; i++) { var bytes = new byte[oneSampleLength]; for (int j = 0; j < oneSampleLength; j++) { bytes[j] = fileContent[i * oneSampleLength + j]; } this.Samples[i] = new DataFileSample(bytes, configuration.DataFileType, configuration.AnalogChannelsCount, configuration.DigitalChannelsCount); } } else if (configuration.DataFileType == DataFileType.ASCII) { var strings = System.IO.File.ReadAllLines(fullPathToFileDAT); //removing empty strings (when *.dat file not following Standard) strings = strings.Where(x => x != string.Empty).ToArray(); for (int i = 0; i < samplesCount; i++) { this.Samples[i] = new DataFileSample(strings[i], configuration.AnalogChannelsCount, configuration.DigitalChannelsCount); } } }