- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
关于这篇文章 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/
关于这篇文章 Stream read selected listbox item query 我正在读取一个 SEGY 文件(地震数据),通过上面的帖子,我设法读取了前 3200 个字节,这是一个 S
我是一名优秀的程序员,十分优秀!