【发布时间】:2014-06-17 16:13:17
【问题描述】:
我已经为此苦苦挣扎了一段时间。我创建了一个实用程序,允许您打开 .TXT 文件。这些文本文件包含 PCL(打印命令语言)。当我导入一个新文件时,它被 \0(NULL 终止符)截断。因为 PCL 文件在我导入的所有内容中随机包含图形图像,所以在第一个位图图像处被截断,因为位图图像以 NULL 开头。
这是此处看到的确切问题:Displaying Raw Data From Image File Using TextBox or RichTextBox?
很遗憾,由于我的(新手)声誉低(需要 15 个代表),我无法对这个帖子发表评论。也无法粘贴屏幕截图(需要 10 个代表)。
Notepad++ 显示信息的方式如下:
这是我的 RichTextBox 显示相同信息的方式:
这是一个问题的原因(缩小):
栅格数据正好在我需要的两部分数据(PCL)之间。栅格数据下方的所有信息都不会被拉入。
这是我尝试过的(注意:我使用的是自定义 RichTextBox,但这不会影响任何事情,因为它只是一个具有拖放功能的 RichTextBox):
byte[] bytes = new byte[2048];
string data = System.Text.Encoding.ASCII.GetString(bytes);
dragDropRichTextBox1.Text = data.Replace("\0", @"1");
这只会导致 2048 个数字“1”字符链,而没有任何文本文件的数据被拉入。非常感谢任何帮助。
无论我做什么,我都想保留我当前的拖放功能:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace PCL_Utility
{
public class DragDropRichTextBox : RichTextBox
{
public DragDropRichTextBox()
{
this.AllowDrop = true;
this.DragDrop += DragDropRichTextBox_DragDrop;
}
void DragDropRichTextBox_DragDrop(object sender, DragEventArgs e)
{
//string[] fileText = e.Data.GetData(DataFormats.FileDrop) as string[];
string[] fileText = e.Data.GetData(DataFormats.FileDrop) as string[];
if (fileText != null)
{
foreach (string name in fileText)
{
try
{
this.AppendText(File.ReadAllText(name) + "\n -------- End of File -------- \n\n");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
}
}
}
【问题讨论】:
-
我不确定答案,但是有没有办法可以读取文件的大小然后读取那么多字节?
-
我明白你在说什么。不管出于何种原因,即使我为每个字符都有足够的字节数,它也会使“每个”字符成为 1,而不仅仅是“\0”字符。我所知道的是,如果我再提高 4 点声望点,我就会丢下这头野兽的一些截图!
-
请用您正在编程的语言标记您的问题。
-
标签已更新。
-
RichTextBox 旨在显示文本,而不是二进制数据。特别是富文本。除了它显示的乱码之外,它将 PCL 数据中的二进制零视为字符串终止符。您必须将数据转换为适合 RTB 和人类的格式。十六进制很常见。使用 BitConverter.ToString(byte[]) 很简单。
标签: c# null .net-4.5 terminator