Click or drag to resize

IDfsFile Interface

Interface handling generic access to Dfs file.

The functionality is based on a file pointer pointing into the file on the disk.

Whenever calling one of the read or write methods, the file pointer will move to the next static item or dynamic item-timestep in the file.

The methods reading the next static or dynamic item will depend on previous calls to any of the read and write methods.

The two ReadStaticItemNext and ReadItemTimeStepNext are the most efficient way of iterating through the data in the file. If iterating in another way, for example over all the time steps of one item, and then the next item, this will imply a performance hit, since the file pointer needs to be repositioned at each read. Especially fro dfs0 files this is noticable; not very much data is being read for one item timestep, and it is faster reading data sequentially than moving the file pointer.

Namespace:  DHI.Generic.MikeZero.DFS
Assembly:  DHI.Generic.MIKEZero.DFS (in DHI.Generic.MIKEZero.DFS.dll) Version: 19.0.0.0 (11.1.1.1111)
Syntax
public interface IDfsFile : IDfsFileIO, 
	IDfsFileStaticIO, IDisposable

The IDfsFile type exposes the following members.

Properties
  NameDescription
Public propertyFileInfo
Information in the header.
Public propertyFileMode
Mode of the current file

This is set to Closed when the file has been closed.

Public propertyItemInfo
List of dynamic item info's.
Top
Methods
  NameDescription
Public methodClose
Close the file and release all ressources associated with it. The header information is still valid (for reading) even though the file has been closed.
(Inherited from IDfsFileIO.)
Public methodDfsCurrentVersion
Returns the current version of the Dfs file library
Public methodDispose
Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
(Inherited from IDisposable.)
Public methodFindItem
Positions the file pointer at the location in the file where the specified dynamic item at the specified time step starts.
(Inherited from IDfsFileIO.)
Public methodFindTimeStep
Positions the file pointer at the location in the file where the specified time step starts.
(Inherited from IDfsFileIO.)
Public methodFlush
Flush cached data to the file. This will especially update the header information, such that if another process is reading the file while it is being read, the new header information can be retrieved.
(Inherited from IDfsFileIO.)
Public methodFlushTimeStep
Flush cached data to the file. This will update the time part of the header information, but not other parts of the header.

Compared to the Flush method; the Flush will update statistics of all items (if enabled) and all modifications to the header data. This method will only update the time part. The Flush method can be an expensive operations especially for files with many dynamic items. This method is independent of the file at hand.

(Inherited from IDfsFileIO.)
Public methodReadItemTimeStep(Int32, Int32)
Reads the dynamic item-timestep as specified from the file. It throws an exception if itemNumber or timestepIndex is out of range.
(Inherited from IDfsFileIO.)
Public methodReadItemTimeStep(IDfsItemData, Int32)
Read the specified item and time step. With this you can reuse the data buffer in IDfsItemData, Data. The data is updated in place.

If the data from one timestep is to be saved for later, the user is responsible to copy the data before using this method again.

(Inherited from IDfsFileIO.)
Public methodReadItemTimeStepNext

Reads the next dynamic item-timestep. First time called it returns the first timestep of the first item. It cycles through each timestep, and each item in the timestep. For a file with 3 items, it returns (itemnumber, timestepIndex) in the following order: (1,0), (2,0), (3,0), (1,1), (2,1), (3,1), (1,2), etc.

If one of the ReadItemTimeStep is called with for example (1,4) the next call to this method will continue from there and return (2,4).

If one of the methods reading/writing static item data is called, the iterator is reset, and the next call to this method again returns the first item-timestep.

This is the most efficient way to iterate through all the items and timesteps in a file, since it iterates exactly as the data is stored on the disk.

(Inherited from IDfsFileIO.)
Public methodReadStaticItem
Read the number staticItemNo static item from the file.
(Inherited from IDfsFileStaticIO.)
Public methodReadStaticItemNext
Reads the next static item. First time called it returns the first static item. If ReadStaticItem(Int32) is called for example with argument staticItemNo 3, the next call to this method will return static item number 4. If one of the methods reading/writing dynamic item data is called, see IDfsFileIO, the static item number is reset, and the next call to this method again returns the first item number.
(Inherited from IDfsFileStaticIO.)
Public methodReset
Resets the file pointer to point on the first dynamic item time step in the file.

Can also be used if it is required to restart reading the static items.

(Inherited from IDfsFileIO.)
Public methodWriteItemTimeStep
Writes data to the specified item and timestep in the file.

If the item-timestep exists already, data is updated. If it does not exist, the item number and timestep index must match exactly the next item-timestep after the last one in the file.

The size of the data must match the data size of the item that is to be written.

The time value is only relevant for files with non-equidistant time axis. For files with an equidistant time axis, the time value is ignored, and a zero can be used.

(Inherited from IDfsFileIO.)
Public methodWriteItemTimeStepNext

Writes the next dynamic item-timestep.

If the file pointer points to the end of the file, this will append a new item-timestep to the file. If the file pointer points to an existing item-timestep, the data of that item-timestep is updated.

Remember that the file pointer position depends on the mode that the file was opened: In edit mode the file pointer points at the first item-timestep. In append mode the file pointer points initially at the end of file.

It iterates over the item-timesteps as the ReadItemTimeStepNext, see there for more details.

This is the most efficient way to iterate through and update/append the items and timesteps in a file, since it iterates exactly as the data is stored on the disk.

The size of the data must match the data size of the item that is to be written.

The time value is only relevant for files with non-equidistant time axis. For files with an equidistant time axis, the time value is ignored, and a zero can be used.

(Inherited from IDfsFileIO.)
Public methodWriteStaticItemData
Write the static item back to the file. the staticItem must originate from this file. This will update and overwrite the static item information and the data of the static item.
(Inherited from IDfsFileStaticIO.)
Top
Extension Methods
  NameDescription
Public Extension MethodCreateEmptyItemData(Int32)Overloaded. (Defined by DfsExtensions.)
Public Extension MethodCreateEmptyItemDataT(Int32)Overloaded.
Create an IDfsItemDataT of the correct type for the item with the given itemNumber.

The result can be used by ReadItemTimeStep(IDfsItemData, Int32)

If not the item is of type {T}, an exception will be thrown.

(Defined by DfsExtensions.)
Public Extension MethodCreateEmptyItemDatasOverloaded. (Defined by DfsExtensions.)
Public Extension MethodCreateEmptyItemDatasTOverloaded.
Create an IDfsItemDataT of the provided type for each of the dynamic items in the file.

The result can be used by ReadItemTimeStep(IDfsItemData, Int32)

If not all items are of type {T}, an exception will be thrown.

(Defined by DfsExtensions.)
Public Extension MethodSearch(DateTime)Overloaded.
Searches the dfs file for the time step index of a time, and returns the zero-based time step index. The time axis of the file must be a calendar type time axis

NOTE: For the non-equidistant time axes, the metod will read the first item in the file for a number of timesteps in random order, performing a binary search in the file data on disc. This will be slow if used many times on the same file. In such a case, use the lazy version of GetDateTimes(IDfsFile, Boolean) or GetDateTimes(IDfsFile, DateTime, Boolean).

For the equidistant time axis, the method will calculate the time step index directly without reading data from the file.

(Defined by DfsExtensions.)
Public Extension MethodSearch(Double)Overloaded.
Searches the dfs file for the time step index of a time, and returns the zero-based time step index.

NOTE: For the non-equidistant time axes, the metod will read the first item in the file for a number of timesteps in random order, performing a binary search in the file data on disc. This will be slow if used many times on the same file. In such a case, use the lazy version of GetDateTimes(IDfsFile, Boolean) or GetDateTimes(IDfsFile, DateTime, Boolean).

For the equidistant time axis, the method will calculate the time step index directly without reading data from the file.

(Defined by DfsExtensions.)
Top
See Also