我需要将.png文件作为字符串打开并将其放在文本框中。我试图通过此代码执行此操作:
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog dialog = new OpenFileDialog();
dialog.ShowDialog();
text1.Text = dialog.FileName;
string text = System.IO.File.ReadAllText(dialog.FileName);
text2.Text = text;
}
我需要进入我的多行文本框:
‰PNG IHDR OŮ/ç%OsRGB®ÎégAMA±ŹüapHYsĂĂÇo¨d (IDATx ^íť˝ŽŢF˛†'T°łUčĐá*ô,°'Zl˛€®b7t8-0B‡''(; 7Tb @ p $
ř«Ş9ŐĹźŻŮě˙®ŻŰ{H6«ş^5ÉŤžţ0ăÉÁŰĆ#,WXš*CĆxŰ0˛aEVv¶yۨ•ť&ˇÉŘ oFU¬5Ńć$cĽm”ÂrĄIX:čëŢ6ęałĄ)26ŔŰFKŘĽbiÚŚ đ¶a´yŰ…éJśť}ěí“/F×XŮŇ®čëŢŕŇÎFŘ”Ň}šäL/¶ľ=ń÷Ď
Ć|,ÎŇ$çuq¶Młan|Ý4)3 «MĂ0®ŇŠ”™IR†'S:|jŮŰM] SA $$ {eŁŻx»ý; 5〜YC>˛@§i±5ÂŰŇőĹωMY ·Ň“ľ^ŕmèU`ŇDĆxŰ0Ś®8'.;ŰĽml°Âčž3š?€6gĆ'p,+'EîłŃ6[«ŕ
但我只得到一个字:
PNG
拜托,帮助我!
答案 0 :(得分:1)
不确定为什么要尝试这样做,但如果这是你真正想要的,你可以使用base64编码的字符串
Read a Image file:
Bitmap loadedBitmap = Bitmap.FromFile(dialog.Filename);
Image imgFile = Image.FromFile(dialog.Filename);
using (MemoryStream ms = new MemoryStream())
{
// Convert Image to byte[]
image.Save(ms, format);
byte[] imageBytes = ms.ToArray();
// Convert byte[] to Base64 String
string base64String = Convert.ToBase64String(imageBytes);
text2.Text = base64String;
}
当你正在读回那个字符串时,你可以反过来将base64编码的字符串转换为图像....
答案 1 :(得分:1)
最好使用BinaryReader
读取二进制数据。要在TextBox
中显示它们,您需要替换0x00字符,以免它破坏控件中的文本。
这将用'替换0x00字符。' :
using (BinaryReader br = new BinaryReader(File.Open(yourFile, FileMode.Open)))
{
var data = br.ReadChars ((int)br.BaseStream.Length);
StringBuilder sb = new StringBuilder();
foreach (char c in data)
if ((int)c > 0) sb.Append(c.ToString()); else sb.Append(".");
text2.Text = sb.ToString();
}
修改强>
如果修改最终作业,原始代码也会起作用:
text2.Text = text.Replace((char)0, '.');
说明:在C#中,字符串可以保存任意位模式;但旧的Winform TextBox
仍然与C#之前的版本相同,可能是用C ++编写的,不能正确处理旧的字符串终止字符0x0。
虽然最初的问题不是File.ReadAllText
的使用,但在您的工具箱中使用BinaryReader
及其许多有趣的方法是非常值得的。
结果并非完全无用 - 我刚发现我的测试文件有嵌入式Photoshop ICC配置文件; - )