/// <summary> /// Save the file in case of power loss. Allow for appending afterwards. /// </summary> public void FlushBytes() { // Only run if file setup previously if (bwPLFormat != null) { bwPLFormat.Flush(); bwPLFormat.CloseFile(); bwPLFormat = new ByteWriter(currentDataFile, false); bwPLFormat.OpenFile(false); } }
/// <summary> /// Test method /// </summary> static void Main() { String outFile = "\\My Documents\\testBytes.txt"; Console.WriteLine("Outfile: " + outFile); ByteWriter bw = new ByteWriter(outFile, true); bw.OpenFile(); for (int i = 0; i < 30; i++) { bw.WriteInt(i); Console.WriteLine("Wrote value: " + i); } bw.CloseFile(); }
private void WriteTimeStampPLFormat(double unixTime, ByteWriter byteWriter) { if (isActive) { WocketsTimer.GetUnixTimeBytes(unixTime, retBytes); byteWriter.WriteBytes(retBytes, 6); } }
private void WriteTimeStamp(int time, ByteWriter byteWriter) { if (isActive) byteWriter.WriteInt(time); }
/// <summary> /// Determine and create the directory where the raw data is saved in 1-hour chunks. /// </summary> private void DetermineFilePath() { if (isActive) { if (presentHour != DateTime.Now.Hour) { if (bwPLFormat != null) bwPLFormat.CloseFile(); presentHour = DateTime.Now.Hour; // Need to create a new directory and switch the file name dayPath = DirectoryStructure.DayDirectoryToUse(aRootPathName); // Make sure hour directory exists currentDataFile = dayPath + "\\" + presentHour + "\\"; if (!System.IO.Directory.Exists(currentDataFile)) System.IO.Directory.CreateDirectory(currentDataFile); currentDataFile = currentDataFile + FILE_TYPE_MONIKER + "." + DirectoryStructure.GetDate() + "." + COMP_ID + "." + FILE_EXT; bwPLFormat = new ByteWriter(currentDataFile, true); bwPLFormat.OpenFile(); // Ensure that the first data point in the new file will start // with the full, rather than differential, timecode info. isForceTimestampSave = true; } } }
/// <summary> /// Saves data to a binary file /// </summary> public override void Save() { #if (PocketPC) if (_Saving) { #region Determine the head of the data buffer int currentHead = -1; currentHead = this._Decoder._Head; #endregion Determine the head of the data buffer #region Check if a new binary file need to be created DateTime now = DateTime.Now; if (presentHour != now.Hour) //((bw==null)||(presentHour != DateTime.Now.Hour)|| (presentMinute != DateTime.Now.Minute) || (presentSecond!= DateTime.Now.Second)) { if (bw != null) bw.CloseFile(); presentHour = now.Hour; presentMinute = now.Minute; presentSecond = now.Second; // Need to create a new directory and switch the file name dayPath = DirectoryStructure.DayDirectoryToUse(this._RootStorageDirectory); // Make sure hour directory exists currentDataFile = dayPath + "\\" + presentHour + "\\"; if (!System.IO.Directory.Exists(currentDataFile)) System.IO.Directory.CreateDirectory(currentDataFile); currentDataFile = currentDataFile + FILE_TYPE_PREFIX + "." + DirectoryStructure.GetDate() + "." + this._ID + "." + FILE_EXT; bw = new ByteWriter(currentDataFile, true); bw.OpenFile(32768); // Ensure that the first data point in the new file will start // with the full, rather than differential, timecode info. isForceTimestampSave = true; } #endregion Check if a new binary file need to be created // Write data as long as the tail is not equal to the head while (tail != currentHead) { #region Populate the acceleration data that need to be written data = ((AccelerationData)this._Decoder._Data[tail]); #endregion Populate the acceleration data that need to be written #region Check for timestamp errors aUnixTime = data.UnixTimeStamp; if (aUnixTime < lastUnixTime) { lastUnixTime = aUnixTime; Logger.Error("Accelerometer: Save: Data overwritten without saving Accelerometer.cs Save " + this._ID + " " + aUnixTime + " " + lastUnixTime); } #endregion Check for timestamp errors #region Write Data if (bw != null) { #region Write Timestamp diffMS = (int)(aUnixTime - lastUnixTime); if (isForceTimestampSave || (diffMS > 254) || (timeSaveCount == TIMESTAMP_AFTER_SAMPLES)) { bw.WriteByte((byte)255); WocketsTimer.GetUnixTimeBytes(aUnixTime, retBytes); bw.WriteBytes(retBytes, 6); timeSaveCount = 0; isForceTimestampSave = false; } else { bw.WriteByte((byte)diffMS); timeSaveCount++; } #endregion Write Timestamp #region Write Raw Data for (int j = 0; j < data._Length; j++) bw.WriteByte(data.RawBytes[j]); #endregion Write Raw Data } #endregion Write Data #region Update Pointers, statistics and time stamps lastUnixTime = aUnixTime; this.tailUnixTimestamp = aUnixTime; if (tail >= this._Decoder._BufferSize- 1) tail = 0; else tail++; this._SavedPackets++; #endregion Update Pointers, statistics and time stamps } if ((bw != null) && (this._Flush)) bw.Flush(); } #endif }