gpt4 book ai didi

c# - 如何阅读包含 HTML 的 Lync 对话文件?

转载 作者:行者123 更新时间:2023-11-30 12:25:21 24 4
gpt4 key购买 nike

我在用 C# 将本地文件读入字符串时遇到问题。

这是我到目前为止的想法:

 string file = @"C:\script_test\{5461EC8C-89E6-40D1-8525-774340083829}.html";
using (StreamReader reader = new StreamReader(file))
{
string line = "";
while ((line = reader.ReadLine()) != null)
{
textBox1.Text += line.ToString();
}
}

textbox with text from file

而且这是唯一似乎有效的解决方案。

我已经尝试了一些其他建议的读取文件的方法,例如:

string file = @"C:\script_test\{5461EC8C-89E6-40D1-8525-774340083829}.html";
string html = File.ReadAllText(file).ToString();
textBox1.Text += html;

enter image description here

然而它并没有像预期的那样工作。

这是我试图读取的文件的前几行:

enter image description here

如您所见,它有一些古怪的字符,老实说,我不知道这是否是造成这种奇怪行为的原因。

但在第一种情况下,代码似乎跳过了这些行,只打印“Office Communicator 生成的文档...”

最佳答案

如果您可以使用 API 或 SDK,甚至可以对您尝试阅读的格式进行描述,那么您的任务会更容易。然而,二进制格式看起来并不那么复杂,并且带有 hexviewer。我已经安装了这么远,以便从您提供的示例中获取 html。

要解析非文本文件,您可以回退到 BinaryReader然后使用 Read methods 之一从字节流中读取正确的类型。我用了ReadByteReadInt32 .请注意在方法的描述中如何解释读取了多少字节。当您尝试破译您的文件时,这会变得很方便。

    private string ParseHist(string file)
{
using (var f = File.Open(file, FileMode.Open))
{
using (var br = new BinaryReader(f))
{
// read 4 bytes as an int
var first = br.ReadInt32();
// read integer / zero ended byte arrays as string
var lead = br.ReadInt32();
// until we have 4 zero bytes
while (lead != 0)
{
var user = ParseString(br);
Trace.Write(lead);
Trace.Write(":");
Trace.Write(user.Length);
Trace.Write(":");
Trace.WriteLine(user);
lead = br.ReadInt32();
// weird special case
if (lead == 2)
{
lead = br.ReadInt32();
}
}

// at the start of the html block
var htmllen = br.ReadInt32();
Trace.WriteLine(htmllen);
// parse the html
var html = ParseString(br);
Trace.Write(len);
Trace.Write(":");
Trace.Write(html.Length);
Trace.Write(":");
Trace.WriteLine(html);
// other structures follow, left unparsed

return html.ToString();
}
}
}

// a string seems to be ascii encoded and ends with a zero byte.
private static string ParseString(BinaryReader br)
{
var ch = br.ReadByte();
var sb = new StringBuilder();
while (ch != 0)
{
sb.Append((char)ch);
ch = br.ReadByte();
}
return sb.ToString();
}

您可以在 winform 应用程序中使用简单的解析逻辑,如下所示:

    private void button1_Click(object sender, EventArgs e)
{
webBrowser1.DocumentText = ParseHist(@"5461EC8C-89E6-40D1-8525-774340083829-Copia.html");
}

请记住,这不是万无一失的方法,也不是推荐的方法,但它应该可以帮助您入门。对于不能很好解析的文件,您需要返回 hexviewer 并找出哪些其他字节结构是新的或与您已有的不同。这不是我打算帮助您的事情,而是留给您作为练习来解决。

关于c# - 如何阅读包含 HTML 的 Lync 对话文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31649545/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com