gpt4 book ai didi

c# - 读取 SEGY 文件中的 400 字节二进制文件头

转载 作者:太空宇宙 更新时间:2023-11-03 13:13:56 30 4
gpt4 key购买 nike

关于这篇文章 Stream read selected listbox item query

我正在读取一个 SEGY 文件(地震数据),通过上面的帖子,我设法读取了前 3200 个字节,这是一个 SEGY 文件的文本文件头。

http://en.wikipedia.org/wiki/SEG_Y http://www.seg.org/documents/10161/77915/seg_y_rev1.pdf

我接下来要做的是读取 3200 字节文本文件头之后的 400 字节二进制文件头。

我已经修改了我的代码以尝试读取文件并跳过前 3200 个字节但是它出现了一个访问被拒绝的异常,我不明白为什么,我可以很好地读取 texual header 所以我不认为这确实是一个访问问题。我怀疑这就是我设置二进制读数的方式。 (我发现了访问问题,我没有从读取的文本标题中关闭文件)

阅读二进制文件后,我想将其转换为可读文本并将其显示在富文本框中,但不幸的是,我只有 5 个月的 C# 修修补补,这超出了我的能力范围。

如有任何帮助,我们将不胜感激。

char[] binary = new char[400];

String item = (string)txtPath.Text + @"\" + lstFiles.SelectedItem;
FileStream readStream;
try
{
readStream = new FileStream(item, FileMode.Open);
BinaryReader readBinary = new BinaryReader(readStream);
readBinary.BaseStream.Seek(0, SeekOrigin.Begin);
readBinary.Read(binary, 3200, 400);
string stringData = "";

for (int i = 0; i < data.Length; i++)
{
if ((i % 80) == 0 && stringData != "")
stringData += Environment.NewLine;
stringData += data[i].ToString();
}
rtbHeader.Text = stringData + Environment.NewLine;
rtbHeader.AppendText(item);
readStream.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}

最佳答案

Read 方法不是那样工作的。

你试过这个:

readBinary.Read(binary, 3200, 400);

这将读取 当前文件指针处的 400 个字节,然后从 数组中的偏移量 3200 开始。

根据您的描述,这不是您想要的。

相反,手动跳过前 3200 个字节,然后为该参数指定 0:

readStream = new FileStream(item, FileMode.Open);
BinaryReader readBinary = new BinaryReader(readStream);
readBinary.BaseStream.Seek(3200, SeekOrigin.Begin);
readBinary.Read(binary, 0, 400);

来自documentation of BinaryReader.Read :

index
The starting point in the buffer at which to begin reading into the buffer.

关于c# - 读取 SEGY 文件中的 400 字节二进制文件头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27309833/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com