/// <summary> /// Opens the file for writing. /// </summary> /// <returns>The opened file.</returns> /// <param name="Path">Path to the output file.</param> /// <param name="Headers">FITS Headers to be written to the file.</param> public static MMapFitsFile OpenWriteFile(string Path, HeaderTable Headers) { FileInfo info = new FileInfo(Path); int HLength = ((Headers.Count * 80) + 2879) / 2880 * 2880; int DLength = HeaderIO.ComputeDataArrayLength(Headers) + 2879; DLength = DLength / 2880 * 2880; int FLength = HLength + DLength; MemoryMappedFile mmap = MemoryMappedFile.CreateFromFile(Path, FileMode.Create, Guid.NewGuid().ToString(), FLength, MemoryMappedFileAccess.ReadWrite); Stream s = mmap.CreateViewStream(); FitsFileBuilder builder = new FitsFileBuilder() { PrimaryTable = new HeaderTable() }; foreach (var w in Headers) { builder.PrimaryTable.Add(w.Key, w.Value); s.Write(((FITSMetadataRecord)w.Value).ToRawRecord(), 0, 80); } s.Write(Encoding.UTF8.GetBytes("END".PadRight(80)), 0, 80); while (s.Position < HLength) { s.Write(Encoding.UTF8.GetBytes(string.Empty.PadRight(80)), 0, 80); } builder.PrimaryDataPointer = HLength; s.Dispose(); return(new MMapFitsFile(Path, true, null, builder, mmap, MemoryMappedFileAccess.ReadWrite)); }
/// <summary> /// Open file for reading. /// </summary> /// <returns>The opened file.</returns> /// <param name="Path">Path to the file.</param> /// <param name="numberGetter">Delegate that generates the image numbers in a MEF FITS.</param> public static MMapFitsFile OpenReadFile(string Path, MEFImageNumberGetter numberGetter = null) { FileInfo info = new FileInfo(Path); MemoryMappedFile mmap = MemoryMappedFile.CreateFromFile(Path, FileMode.Open, Guid.NewGuid().ToString(), 0, MemoryMappedFileAccess.Read); Stream stream = mmap.CreateViewStream(0, 0, MemoryMappedFileAccess.Read); FitsFileBuilder builder = HeaderIO.ReadFileHeaders(stream, info.Length, numberGetter); stream.Dispose(); return(new MMapFitsFile(Path, false, numberGetter, builder, mmap, MemoryMappedFileAccess.Read)); }
/// <summary> /// Opens a file from the given stream. /// </summary> /// <returns>The opened file.</returns> /// <param name="str">Input stream.</param> /// <param name="Length">Data length.</param> /// <param name="Path">Path to the data.</param> /// <param name="numberGetter">MEF naming policy.</param> public static NSStreamFitsFile OpenFile(Stream str, int Length, string Path, MEFImageNumberGetter numberGetter = null) { byte[] Data = new byte[Length]; str.Read(Data, 0, Data.Length); FitsFileBuilder Headers; using (MemoryStream ms = new MemoryStream(Data)) Headers = HeaderIO.ReadFileHeaders(ms, Length, numberGetter); return(new NSStreamFitsFile(Data, Path, false, numberGetter, Headers)); }