C#如何读取二进制方式文件的一部分

http_it 2009-04-30 04:26:14
现在我有个二进制的文件,是由一个十进制文件转换的。现在我只想读取这个二进制文件的一部分,之后再转换成十进制的文件。有办法实现吗?
比如说十进制的文件内容:

【折戟沈沙铁未销,自将磨洗认前朝。】
【东风不与周郎便,铜雀春深销二乔。】

现在我已经保存在一个二进制的文件里。
但是我只想读取到这个二进制的一半。
即这个二进制转换成的十进制文件内容:
【折戟沈沙铁未销,自将磨洗认前朝。】


...全文
673 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
sushou2009 2009-04-30
  • 打赏
  • 举报
回复
StreamReader.ReadLine();读取的是一行~返回的是字符串~
mykelly6 2009-04-30
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 http_it 的回复:]

这个是把文本文件转换成二进制数组后,再写入文件的方法:
[/Quote]
如果只是单纯的把string转化成byte[]的话new StreamReader(xxx).ReadLine();应该没问题的
http_it 2009-04-30
  • 打赏
  • 举报
回复

这个是把文本文件转换成二进制数组后,再写入文件的方法:
  /// <summary>
/// 以二进制形式将数据写入文件
/// </summary>
/// <param name="fileName">要写入的文件地址</param>
/// <param name="data">要写入的数据</param>
/// <returns>是否成功</returns>
public static bool WriteFileByByte(String fileName, Byte[] data)
{
bool result;
result = true;
try
{
//以独占方式打开这个文件
FileStream fs = new FileStream(fileName, FileMode.Create, FileAccess.Write, FileShare.None);
try
{
fs.Write(data, 0, data.Length);
fs.Dispose();
}
catch
{
fs.Dispose();
FileInfo fi = new FileInfo(fileName);
fi.Delete();
result = false;
}
fs.Dispose();
}
catch (Exception e)
{
Console.WriteLine(e.Message);
result = false;
}
return result;
}
http_it 2009-04-30
  • 打赏
  • 举报
回复
fs.Read(data, offset, remaining);


没有fs.ReadLine 方法
http_it 2009-04-30
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 http_it 的回复:]
引用 7 楼 tangyishi 的回复:
你二进制十进制概念没搞清楚,应该是指不同的编码方式吧?


如果有一个 sr.WriteLine() 的话,这个办法我看行了
[/Quote]
呵呵,你说的对! 是文本文件,把文本文件说成事十进制文件有点莫名其妙了
jacknes009 2009-04-30
  • 打赏
  • 举报
回复
要看你怎么存储了。。。几个字节一组的。就可以了。。
mykelly6 2009-04-30
  • 打赏
  • 举报
回复
你的这个文本是自己写的吗?写进去的时候直接写字符串,和把字符串转化为byte数组再写其实是一样的
mykelly6 2009-04-30
  • 打赏
  • 举报
回复
我对你这个十进制文件的说法很费解,你应该是想说文本文件吧。
文件都是以二进制的形式来存储的,你这样的文件用readline之类来直接读应该是没有问题的
http_it 2009-04-30
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 tangyishi 的回复:]
你二进制十进制概念没搞清楚,应该是指不同的编码方式吧?
[/Quote]

如果有一个 sr.WriteLine() 的话,这个办法我看行了
http_it 2009-04-30
  • 打赏
  • 举报
回复
我说的内容只是一个举列而已,实际应用中会有大篇幅的内容啊,这个时候去分行呢,有点乱了
fdc123 2009-04-30
  • 打赏
  • 举报
回复
分两行存 然后sr.ReadLine()只读一行行不行呢?
tangyishi 2009-04-30
  • 打赏
  • 举报
回复
你二进制十进制概念没搞清楚,应该是指不同的编码方式吧?
http_it 2009-04-30
  • 打赏
  • 举报
回复
 
/// <summary>
/// 用二进制方式读取文件
/// </summary>
/// <param name="fileName">文件名</param>
/// <returns>读取到的数据</returns>
public static Byte[] ReadFileByByte(String fileName)
{
//以独占方式打开一个文件
FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.None);
//创建一个Byte用来存放读取到的文件内容
Byte[] data = new Byte[fs.Length];
//定义变量存储初始读取位置
int offset = 0;
//定义变量存储当前数据剩余未读的长度
int remaining = data.Length/2;
try
{
while (remaining > 0)
{
int read = fs.Read(data, offset, remaining);
if (read <= 0)
throw new EndOfStreamException("文件读取到" + read.ToString() + "失败!");
// 减少剩余的字节数
remaining -= read;
// 增加偏移量
offset += read;
}
}
catch (Exception e)
{
data = null;
errorMsg = e.Message;
}
fs.Dispose();
return data;
}



这种方法行不通
mykelly6 2009-04-30
  • 打赏
  • 举报
回复
可以把这个二进制文件读出来,转成string,看看哪些是你需要的。
string s = new string(byte[] buffer);
你所说的文件读一半是指文件长度的一半吗?
wujinjian2008n 2009-04-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 blestcc 的回复:]
自己讀讀試試啊
[/Quote]
格拉 2009-04-30
  • 打赏
  • 举报
回复
WHY?
http_it 2009-04-30
  • 打赏
  • 举报
回复
读了,不行
blestcc 2009-04-30
  • 打赏
  • 举报
回复
自己讀讀試試啊

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧