我在变量中有一个字节文档,我想将其放入FileStream
,以便将其用于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
变量创建一个新文档,类似于{{1} },sw.write(fullText)
是sw
。
所以,我想在不知道路径的情况下读取文件,但是直接使用字节文档。我可以这样做吗?
如果我不清楚,请不要犹豫,说出来。
答案 0 :(得分: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()
方法也不会。
答案 1 :(得分:1)
您需要将字节数组转换为字符串,然后替换所需内容,并编写最终结果。 您甚至不需要StreamReaders或编写器来执行此操作。
看一下这篇文章: How to convert byte[] to string?
您可以使用不同的方法将文档转换为字符串。 作为答案接受的是:
string result = System.Text.Encoding.UTF8.GetString(myByteDocument)
完成所有替换后,只需将字符串保存到文件中,就像这样(最简单的方法):
File.WriteAllText(path, result);