[英]Directly read a byte document with FileStream (without path)
我在变量中有一个字节文档,我想将其放入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
变量的新文档,其中包含sw.write(fullText)
,其中sw
是一个StreamWriter
。
因此,我想在不知道路径的情况下读取文件,而是直接使用字节文档。 我可以这样做吗?
如果我不清楚,请不要犹豫。
您应该查看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()
方法的情况下发生异常,也可以确保清除资源。
您需要的是将字节数组转换为字符串,然后替换所需的内容并写入最终结果。 您甚至不需要StreamReaders或writer来执行此操作。
看一下这篇文章: 如何将byte []转换为字符串?
在这里,您可以使用不同的方法将文档转换为字符串。 可以接受的答案是:
string result = System.Text.Encoding.UTF8.GetString(myByteDocument)
完成所有替换操作后,只需将字符串保存到文件中,即可(最简单的方法):
File.WriteAllText(path, result);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.