如何使用 FitsReader 读取 FITS 文件并将其保存到 fitsHeaderDataUnit 中?有人可以给我任何示例吗?谢谢(FitsReader 是TA.ObjectOrientedAstronomy.FlexibleImageTransportSystem内的函数)
```c#
//运行报错:ArgumentException: illegal characters in path
//Create new OpenFileDialog
OpenFileDialog openFileDialog = new OpenFileDialog
{
InitialDirectory = "c:\\download",
Filter = "(*FITS)|*FITS|All files (*.*)|*.*",
Title = "Select .FITS File",
RestoreDirectory = true,
};
// Show open file dialog box
Nullable<bool> result = openFileDialog.ShowDialog();
// Process open file dialog box results
if (result == true)
{
//Get the path of specified file
filePath = openFileDialog.FileName;
TextBox2.Text = openFileDialog.FileName;
FitsHeader fitsHeader;
FitsHeaderDataUnit fitsHeaderDataUnit ;
FileStream fs = new FileStream(openFileDialog.FileName, FileMode.Open, FileAccess.Read);
FitsReader fitsReader = new FitsReader(fs);
fitsHeader = fitsReader.ReadPrimaryHeader().Result;
fitsHeaderDataUnit = fitsReader.ReadPrimaryHeaderDataUnit().Result;
}
```
该回答引用ChatGPT
如有疑问,可以回复我!
可能是由于文件路径中包含非法字符或者文件不存在导致的。请确保 filePath 变量包含了正确的文件路径,或者将其直接传递给 FitsReader,例如:
string filePath = openFileDialog.FileName;
FitsReader fitsReader = new FitsReader(filePath);
另外,你可以考虑在使用 FileStream 读取文件之后,显式地关闭文件流,以确保资源被释放。你可以在代码结尾处添加以下代码:
fs.Close();
fitsread
读取 FITS 文件中的数据全页折叠
语法
data = fitsread(filename)
data = fitsread(filename,'raw')
data = fitsread(filename,extname)
data = fitsread(filename,extname,index)
data = fitsread(filename,___,Name,Value)
说明
示例
data = fitsread(filename) 读取由 filename 指定的普适图像传输系统 (FITS) 文件的主要数据,并将其作为调整后的数组返回。该函数将未定义的数据值替换为 NaN,根据斜率和截距值来缩放数值数据,并始终返回双精度值。
示例
data = fitsread(filename,'raw') 读取 FITS 文件的主要数据,不作出调整。此语法不缩放从文件中读取的数据,将未定义的值替换为 NaN。返回的数据保持在文件中指定的类类型。
示例
data = fitsread(filename,extname) 读取 extname 指定的 FITS 文件扩展中的数据。FITS 文件包含主要数据,并且可以有选择性地包含任意数目的可选组件(FITS 术语中称为扩展)。
示例
data = fitsread(filename,extname,index) 还指定存在多个相同扩展类型时的索引。
示例
data = fitsread(filename,___,Name,Value) 使用一个或多个由名称-值参数定义的附加选项从 FITS 文件中读取数据。例如,TableColumns 指定要读取哪些列。
using System;
using System.IO;
using TA.ObjectOrientedAstronomy.FlexibleImageTransportSystem;
namespace FitsReaderExample
{
class Program
{
static void Main(string[] args)
{
// Create new OpenFileDialog
OpenFileDialog openFileDialog = new OpenFileDialog
{
InitialDirectory = "c:\\download",
Filter = "(*FITS)|*FITS|All files (*.*)|*.*",
Title = "Select .FITS File",
RestoreDirectory = true,
};
// Show open file dialog box
Nullable<bool> result = openFileDialog.ShowDialog();
string filePath;
FitsHeader fitsHeader;
FitsHeaderDataUnit fitsHeaderDataUnit;
// Process open file dialog box results
if (result == true)
{
// Get the path of specified file
filePath = openFileDialog.FileName;
Console.WriteLine($"Selected file: {filePath}");
using FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
FitsReader fitsReader = new FitsReader(fs);
fitsHeader = fitsReader.ReadPrimaryHeader().Result;
fitsHeaderDataUnit = fitsReader.ReadPrimaryHeaderDataUnit().Result;
Console.WriteLine($"Fits Header: {fitsHeader}");
Console.WriteLine($"Fits Header Data Unit: {fitsHeaderDataUnit}");
}
else
{
Console.WriteLine("No file selected.");
}
Console.ReadKey();
}
}
}
参考GPT和自己的思路,以下是使用 FitsReader 读取 FITS 文件并将其保存到 fitsHeaderDataUnit 中的 C# 代码:
using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using nom.tam.fits; // 引入FitsReader所在的命名空间
namespace ReadFitsFile
{
class Program
{
static void Main(string[] args)
{
// 定义FITS文件路径
string filePath = "sample.fits";
// 创建FITS读取器
Fits fitsReader = new Fits(filePath);
// 读取FITS文件头数据单元
BasicHDU fitsHeaderDataUnit = fitsReader.ReadHDU();
// 关闭FITS读取器
fitsReader.Close();
// 打印FITS文件头信息
fitsHeaderDataUnit.Info();
}
}
}
上述代码中,我们首先引入了 FitsReader 所在的命名空间 nom.tam.fits,然后定义了一个字符串变量 filePath,用于存储 FITS 文件路径。接着,使用 Fits 类实例化一个 FITS 读取器,读取 FITS 文件头数据单元,并将其保存到 BasicHDU 类型的变量 fitsHeaderDataUnit 中。最后,我们通过调用 BasicHDU 类的 Info 方法打印 FITS 文件头信息,并关闭了 FITS 读取器。
注意:在运行上述代码之前,应当先将 TA.ObjectOrientedAstronomy.FlexibleImageTransportSystem 命名空间所在的程序集添加到项目引用中。
回答不易,还请采纳!!!
参考GPT和自己的思路:在您的代码中,FitsReader 函数的参数是 FileStream 类型的文件流对象,因此您需要打开选定的文件并将其作为参数传递给 FitsReader。此外,您需要在代码中处理任何潜在的异常。
下面是一个示例代码,演示了如何使用 FitsReader 读取 FITS 文件并将其保存到 fitsHeaderDataUnit 中:
using TA.ObjectOrientedAstronomy.FlexibleImageTransportSystem;
using Microsoft.Win32;
using System;
using System.IO;
// 创建 OpenFileDialog 实例,并设置过滤器和初始目录
OpenFileDialog openFileDialog = new OpenFileDialog
{
Filter = "FITS Files (*.fits)|*.fits",
InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop),
};
// 打开对话框并获取结果
bool? result = openFileDialog.ShowDialog();
if (result == true)
{
try
{
// 打开选定的文件并读取其内容
using (FileStream fileStream = new FileStream(openFileDialog.FileName, FileMode.Open, FileAccess.Read))
{
FitsReader fitsReader = new FitsReader(fileStream);
FitsHeaderDataUnit fitsHeaderDataUnit = fitsReader.ReadPrimaryHeaderDataUnit().Result;
// 在这里可以处理读取到的数据
}
}
catch (Exception ex)
{
// 处理异常
Console.WriteLine($"An error occurred: {ex.Message}");
}
}
在这个示例中,我们首先创建了 OpenFileDialog 实例,设置了初始目录和过滤器。然后我们打开对话框并获取结果。如果用户单击了“打开”按钮,我们会尝试打开选定的文件并读取其内容。
在 try 块中,我们创建一个 FileStream 对象并将其传递给 FitsReader。我们调用了 ReadPrimaryHeaderDataUnit 方法来读取文件内容,并将结果存储在 fitsHeaderDataUnit 变量中。在这个示例中,我们没有对读取到的数据进行任何处理,但是您可以在这里添加任何需要的代码来处理数据。
以下答案由GPT-3.5大模型与博主波罗歌共同编写:
根据你提供的代码,似乎路径名有误,导致了 ArgumentException 异常,你可以在路径名字符串前加上 @ 符号,这样可以避免转义字符的问题:
//运行报错:ArgumentException: illegal characters in path
//Create new OpenFileDialog
OpenFileDialog openFileDialog = new OpenFileDialog
{
InitialDirectory = @"c:\download",
Filter = "(*FITS)|*FITS|All files (*.*)|*.*",
Title = "Select .FITS File",
RestoreDirectory = true,
};
// Show open file dialog box
Nullable<bool> result = openFileDialog.ShowDialog();
// Process open file dialog box results
if (result == true)
{
//Get the path of specified file
string filePath = openFileDialog.FileName;
TextBox2.Text = openFileDialog.FileName;
FitsHeader fitsHeader;
FitsHeaderDataUnit fitsHeaderDataUnit ;
FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
FitsReader fitsReader = new FitsReader(fs);
fitsHeader = fitsReader.ReadPrimaryHeader().Result;
fitsHeaderDataUnit = fitsReader.ReadPrimaryHeaderDataUnit().Result;
}
如果你需要更多的帮助,可以提供更多关于 FitsReader 和 FITS 文件格式的信息,这样我们就可以更好地帮助你。
如果我的回答解决了您的问题,请采纳!