C# 在c语言中从混合了文本和二进制数据的文件中读取数据# 我试图从测试站的标签打印机程序输出的文件中读取数据 大多数数据都是可读文本,可以使用StreamReader一次读取一行 有些行需要动态内容来替换部分行,我已经做到了 问题是,打印机命令之一输出徽标,该行以普通文本开始,以二进制数据结束。 如果我试着读这行文字,把整个东西当作一个字符串来处理,就会弄乱标志。我认为我有一个解决办法,在那一行使用Read()方法,并将结果从Int32一次转换为byte,但当Read()方法生成大于255的值时,结果会溢出,这与Convert.ToByte()不符 我希望StreamReader有一个GetByte方法,比如BinaryReader,但它没有 我只是在寻找解决方案时寻求建议
使用C# 在c语言中从混合了文本和二进制数据的文件中读取数据# 我试图从测试站的标签打印机程序输出的文件中读取数据 大多数数据都是可读文本,可以使用StreamReader一次读取一行 有些行需要动态内容来替换部分行,我已经做到了 问题是,打印机命令之一输出徽标,该行以普通文本开始,以二进制数据结束。 如果我试着读这行文字,把整个东西当作一个字符串来处理,就会弄乱标志。我认为我有一个解决办法,在那一行使用Read()方法,并将结果从Int32一次转换为byte,但当Read()方法生成大于255的值时,结果会溢出,这与Convert.ToByte()不符 我希望StreamReader有一个GetByte方法,比如BinaryReader,但它没有 我只是在寻找解决方案时寻求建议,c#,C#,使用BinaryReader而不是StreamReader 您也可以使用BinaryReader阅读文本,就像StreamReader一样-唯一的问题是您需要自带ReadLine作为扩展方法,但下面是一个示例 从技术上讲,可以在同一个流上同时使用StreamReader和BinaryReader,但您需要熟悉这两种方法的内部结构以及它们的读取缓冲区和流读取行为的工作原理。所以我不建议使用这种方法 使用下面的BinaryReaderExtensions来拥有ReadLine,并在到达文件的
BinaryReader
而不是StreamReader
- 您也可以使用
阅读文本,就像BinaryReader
一样-唯一的问题是您需要自带StreamReader
作为扩展方法,但下面是一个示例ReadLine
流上同时使用StreamReader
和BinaryReader
,但您需要熟悉这两种方法的内部结构以及它们的读取缓冲区和流读取行为的工作原理。所以我不建议使用这种方法
BinaryReaderExtensions
来拥有ReadLine
,并在到达文件的二进制部分时切换到二进制方法:
using( FileStream fs = new FileStream( "file.dat", FileMode.Read, etc ) )
using( BinaryReader rdr = new BinaryReader( fs, Encoding.UTF8 ) )
{
// I assume the first 5 lines are text:
List<String> linesOfText = new List<String>();
for( Int32 i = 0; i < 5; i++ )
{
String line = rdr.ReadLine();
if( line is null ) throw new InvalidOperationException( "Encountered premature EOF in text section." );
linesOfText.Add( line );
}
// And after the 5th line it's a 512 byte blob of binary data (for example):
Byte[] buffer = new Byte[ 512 ];
Int32 bytesRead = rdr.Read( buffer, index: 0, count: 512 );
if( bytesRead != buffer.Length ) throw new InvalidOperationException( "Encountered premature EOF (in binary section)." );
}
使用(FileStream fs=newfilestream(“file.dat”、FileMode.Read等))
使用(BinaryReader rdr=新的BinaryReader(fs,Encoding.UTF8))
{
//我假设前5行是文本:
List linesOfText=新列表();
对于(Int32 i=0;i<5;i++)
{
String line=rdr.ReadLine();
如果(行为null)抛出新的InvalidOperationException(“在文本节中遇到过早的EOF”);
linesOfText.Add(行);
}
//第5行之后是512字节的二进制数据块(例如):
字节[]缓冲区=新字节[512];
Int32 bytesRead=rdr.Read(缓冲区,索引:0,计数:512);
if(bytesRead!=buffer.Length)抛出新的InvalidOperationException(“遇到过早的EOF(在二进制段中)”;
}
1。发布一个示例文件2。Post预期输出(例如,string strContents='wahtever应该在样本文件中出现';byte[]binaryData=…///样本文件-2中应该出现的任何内容)3。将你用来解析的代码发布到这个论坛上,但不知道如何发布文件。引起故障的行以:位图15、12、17、56、1开始,然后是255个值的字符串和其他二进制数据。我需要将输出转换为byte[]格式以发送到打印机。使用System.IO;var myFile=File.ReadAllBytes(@“C:\myFile.binary”);File.writealText(@“C:\b64.txt”,Convert.ToBase64String(myFile))代码>然后打开b64.txt,复制内容并粘贴到帖子编辑器中。“我已经成功了”-看起来你没有。有很多方法会出错,也有很多解决方案,尽管这完全取决于您试图在文件中存储什么(特别是)以及为什么不尝试修改文件。只需打开它,阅读内容,添加文本替换,将整个内容转换为字节[]发送到打印机。除徽标外,所有内容目前都正常工作。
using( FileStream fs = new FileStream( "file.dat", FileMode.Read, etc ) )
using( BinaryReader rdr = new BinaryReader( fs, Encoding.UTF8 ) )
{
// I assume the first 5 lines are text:
List<String> linesOfText = new List<String>();
for( Int32 i = 0; i < 5; i++ )
{
String line = rdr.ReadLine();
if( line is null ) throw new InvalidOperationException( "Encountered premature EOF in text section." );
linesOfText.Add( line );
}
// And after the 5th line it's a 512 byte blob of binary data (for example):
Byte[] buffer = new Byte[ 512 ];
Int32 bytesRead = rdr.Read( buffer, index: 0, count: 512 );
if( bytesRead != buffer.Length ) throw new InvalidOperationException( "Encountered premature EOF (in binary section)." );
}