C# 在PNG文件中替换CRLF
我试图用LF替换CRLF(参见原因@) 上面引用的线程的一个简要总结是,基本上,当通过Android调试桥从Android设备传输屏幕截图时,数据流中的换行符换行符换行符被替换为回车换行符,因此我在管道的另一端接收到一个损坏的文件。对其他人有效的方法是通过代码撤销替换,如下所示,但对我来说似乎不起作用 我的代码仍在吐出一个损坏的文件。。。你知道为什么吗 ++我知道代码不是那么干净和有效,它可以,将修复后,所以请保留与我的编码技能,或缺乏相关的意见 谢谢C# 在PNG文件中替换CRLF,c#,binary,adb,screenshot,C#,Binary,Adb,Screenshot,我试图用LF替换CRLF(参见原因@) 上面引用的线程的一个简要总结是,基本上,当通过Android调试桥从Android设备传输屏幕截图时,数据流中的换行符换行符换行符被替换为回车换行符,因此我在管道的另一端接收到一个损坏的文件。对其他人有效的方法是通过代码撤销替换,如下所示,但对我来说似乎不起作用 我的代码仍在吐出一个损坏的文件。。。你知道为什么吗 ++我知道代码不是那么干净和有效,它可以,将修复后,所以请保留与我的编码技能,或缺乏相关的意见 谢谢 static void M
static void Main(string[] args)
{
// adb shell screencap -p > <path>
string path = @"<filepath>\screen.png";
var fs = new FileStream(path, FileMode.Open);
var fsw = new FileStream(path.Replace(".png", "_fixed.png"), FileMode.Create);
var buffer = new byte[fs.Length];
fs.Read(buffer, 0, buffer.Length);
fs.Flush();
fs.Close();
var switched = Repair(buffer);
fsw.Write(switched, 0, switched.Length);
fsw.Flush();
fsw.Close();
Console.WriteLine(buffer.Length);
Console.WriteLine(switched.Length);
Console.Read();
}
static byte[] Repair(byte[] enc)
{
var bstr = new MemoryStream();
for (int i = 0; i < enc.Length; i++)
{
if (enc.Length > i + 1 && enc[i] == 0x0d && enc[i + 1] == 0x0a)
{
bstr.WriteByte(0x0a);
i++;
}
else bstr.WriteByte(enc[i]);
}
bstr.Flush();
bstr.Close();
return bstr.ToArray();
}
static void Main(字符串[]args)
{
//亚洲开发银行外壳屏蔽盖-p>
字符串路径=@“\screen.png”;
var fs=新文件流(路径,FileMode.Open);
var fsw=newfilestream(path.Replace(“.png”,“_fixed.png”)、FileMode.Create);
var buffer=新字节[fs.Length];
fs.Read(buffer,0,buffer.Length);
fs.Flush();
fs.Close();
var开关=维修(缓冲);
fsw.Write(切换,0,切换长度);
fsw.Flush();
fsw.Close();
控制台写入线(缓冲区长度);
控制台写入线(切换长度);
Console.Read();
}
静态字节[]修复(字节[]enc)
{
var bstr=新内存流();
对于(int i=0;ii+1&&enc[i]==0x0d&&enc[i+1]==0x0a)
{
bstr.WriteByte(0x0a);
i++;
}
else bstr.WriteByte(附件[i]);
}
bstr.Flush();
bstr.Close();
返回bstr.ToArray();
}
我是否正确理解您试图更改二进制数据中的行尾?如果是这样,您如何保证您正在更改的特定字节序列是嵌入文本而不是二进制值?@adv12是。文件格式为PNG。有关更多信息,请参阅链接线程。我从工作中的Java移植了这个,它基本上成功地做了同样的事情。。。我想知道是否有一些C#guru能够发现任何错误或进一步的见解。Cheers-DF。你说的损坏到底是什么意思?确保你检查了fs.Read(buffer,0,buffer.Length)的返回值代码>。它有时可能小于请求的值(buffer.Length
)。你能发布这两个文件(正确的png和损坏的png)吗?顺便说一句,我建议你在问题的顶部简短解释一下为什么要这么做,因为很多人没有仔细阅读链接的帖子:)