/// <summary>Converts a <see cref="FileOpConstant"/> value to <see cref="FileMode"/>.</summary> /// <param name="value">The value.</param> /// <returns>The result.</returns> public static FileMode ToFileMode(this FileOpConstant value) { // Note: This is not done in a switch because the order of tests matters. if ((FileOpConstant._O_CREAT | FileOpConstant._O_EXCL) == (value & (FileOpConstant._O_CREAT | FileOpConstant._O_EXCL))) { return(FileMode.CreateNew); } else if ((FileOpConstant._O_CREAT | FileOpConstant._O_TRUNC) == (value & (FileOpConstant._O_CREAT | FileOpConstant._O_TRUNC))) { return(FileMode.OpenOrCreate); } else if (0 != (value & FileOpConstant._O_APPEND)) { return(FileMode.Append); } else if (0 != (value & FileOpConstant._O_CREAT)) { return(FileMode.Create); } else if (0 != (value & FileOpConstant._O_RDWR)) { return(FileMode.Open); } else if (0 != (value & FileOpConstant._O_TRUNC)) { return(FileMode.Truncate); } else { return(FileMode.OpenOrCreate); // This seemed the safest way to handled unrecognized types } }
/// <summary>Converts a <see cref="FileOpConstant"/> value to <see cref="FileOptions"/>.</summary> /// <param name="value">The value.</param> /// <returns>The result.</returns> public static FileOptions ToFileOptions(this FileOpConstant value) { FileOptions ret = 0; if ((value & FileOpConstant._O_RANDOM) != 0) { ret |= FileOptions.RandomAccess; } if ((value & FileOpConstant._O_TEMPORARY) != 0) { ret |= FileOptions.DeleteOnClose; } if ((value & FileOpConstant._O_SEQUENTIAL) != 0) { ret |= FileOptions.SequentialScan; } return(ret); }