0

我在变量中有一个字节文档,我想将它放入 aFileStream中,以便将其放入StreamReader.

我可以这样做吗?

我看到它FileStream使用路径,但是有没有办法读取我的字节文档?

我得到了这样的东西,当然,myByteDocument不起作用,因为它不是一条路径:

file = new FileStream(myByteDocument, FileMode.Open, FileAccess.Read, FileShare.Read);

reader= new StreamReader(file); 
reader.BaseStream.Seek(0, SeekOrigin.Begin);
string fullText= "";
while (reader.Peek() > -1) 
{
    fullText+= reader.ReadLine();
}
reader.Close();

myByteDocument 是这样获得的:

DataRow row = vDs.Tables[0].Rows
byte[] myByteDocument = (byte[])row.ItemArray[0];

我阅读了该文档,并将其放入要替换的字符串中,其中的一些片段,然后在所有替换之后,使用fullText变量创建一个新文档,其中包含类似sw.write(fullText), where swis a StreamWriter.

所以,我想在不知道路径的情况下读取文件,而是直接使用字节文档。我可以这样做吗?

如果我不清楚,请不要犹豫,说出来。

4

2 回答 2

3

您应该查看MemoryStream课程而不是FileStream. 它应该提供您在不知道路径的情况下读取文件所需的功能(提供myByteDocument的是字节数组)。

var file = new MemoryStream(myByteDocument);

您基本上可以使用相同的代码,只需将 MemoryStream 构造函数替换为您尝试使用的 FileStream 构造函数。

string fullText= "";

using(var file = new MemoryStream(myByteDocument))
using(var reader = new StreamReader(file))
{
    reader.BaseStream.Seek(0, SeekOrigin.Begin);
    while (!reader.EndOfStream)
    {
        fullText += reader.ReadLine();
    }
}

请注意,我还using为文件访问添加了块。这比只调用要好得多,reader.Close()因为即使在调用Close()方法不会发生异常的情况下,它也会确保资源的清理。

于 2013-04-16T13:03:41.560 回答
1

您需要将字节数组转换为字符串,然后替换您需要的内容,然后写入最终结果。您甚至不需要 StreamReaders 或 writer 来执行此操作。

看看这篇文章: 如何将字节 [] 转换为字符串?

在这里,您可以使用不同的方法将文档转换为字符串。接受的答案是:

string result = System.Text.Encoding.UTF8.GetString(myByteDocument)

一旦你完成了所有的替换,只需将字符串保存到一个文件中,就像这样(最简单的方法):

File.WriteAllText(path, result);
于 2013-04-16T13:02:51.160 回答