using System.IO;
namespace SabreTools.IO
{
///
/// Extensions to Stream functionality
///
public static class StreamExtensions
{
///
/// Seek to a specific point in the stream, if possible
///
/// Input stream to try seeking on
/// Optional offset to seek to
public static long SeekIfPossible(this Stream input, long offset = 0)
{
// If the stream is null, don't even try
if (input == null)
return -1;
// If the input is not seekable, just return the current position
if (!input.CanSeek)
return input.Position;
// Attempt to seek to the offset
try
{
if (offset < 0)
return input.Seek(offset, SeekOrigin.End);
else if (offset >= 0)
return input.Seek(offset, SeekOrigin.Begin);
return input.Position;
}
catch
{
return -1;
}
}
}
}