C# 使用FileStream(无路径)直接读取字节文档
我在变量中有一个字节文档,我想将其放入C# 使用FileStream(无路径)直接读取字节文档,c#,filestream,streamreader,C#,Filestream,Streamreader,我在变量中有一个字节文档,我想将其放入文件流,以便将其用于流阅读器 我能做这个吗 我看到FileStream使用路径,但是有没有办法读取我的字节文档 当然,MyBytedDocument不起作用,因为它不是路径: file = new FileStream(myByteDocument, FileMode.Open, FileAccess.Read, FileShare.Read); reader= new StreamReader(file); reader.BaseStream.Seek
文件流
,以便将其用于流阅读器
我能做这个吗
我看到FileStream
使用路径,但是有没有办法读取我的字节文档
当然,MyBytedDocument
不起作用,因为它不是路径:
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();
我的BYTED文档是这样获得的:
DataRow row = vDs.Tables[0].Rows
byte[] myByteDocument = (byte[])row.ItemArray[0];
我阅读文档,将其放入字符串中以替换其中的一些片段,然后在所有替换之后,我使用fullText
变量创建一个新文档,类似于sw.write(fullText)
,其中sw
是一个StreamWriter
因此,我想在不知道路径的情况下读取文件,但直接使用字节文档。我能做这个吗
如果我不清楚,请不要犹豫,说出来。您需要的是将字节数组转换为字符串,然后替换所需内容,并写入最终结果。 您甚至不需要StreamReader或Writer来执行此操作 请看这篇文章: 这里有不同的方法将文档转换为字符串。 答案是:
string result = System.Text.Encoding.UTF8.GetString(myByteDocument)
完成所有替换后,只需将字符串保存到文件中,方法如下(最简单的方法):
您需要的是将字节数组转换为字符串,然后替换所需内容并写入最终结果。 您甚至不需要StreamReader或Writer来执行此操作 请看这篇文章: 这里有不同的方法将文档转换为字符串。 答案是:
string result = System.Text.Encoding.UTF8.GetString(myByteDocument)
完成所有替换后,只需将字符串保存到文件中,方法如下(最简单的方法):
您应该查看类,而不是FileStream
。它应该提供在不知道路径的情况下读取文件所需的功能(提供的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();
}
}
请注意,我还使用块为文件访问添加了。这比只调用reader.Close()
要好得多,因为即使发生异常,只要调用Close()
方法就不会发生异常,它也能确保清理资源。您应该查看类,而不是FileStream
。它应该提供在不知道路径的情况下读取文件所需的功能(提供的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();
}
}
请注意,我还使用
块为文件访问添加了。这比只调用reader.Close()
要好得多,因为即使发生异常,只要调用Close()
方法就不会发生异常,它也能确保清理资源。字节文档到底是什么?它是字节数组还是类似的?你能展示一下你是如何创建这个对象的吗?是的,还不清楚。。。你有什么意见?字节数组?流动它来自哪里?根据您对获取myByteDocument
代码的编辑,仍然不清楚它是什么DataRow.ItemArray[]
只返回一个对象。所以它仍然可以是任何东西。我猜这个文件是存储在数据库里的?如果是这样,它是如何存储的?在构建字符串时,应该考虑使用<代码> StringBuilder <代码>。pSuBee:忘记在此处添加CAST,(Byth[])行。ItEntry[0 ]。是的,它以BLOB的形式存储在数据库中。字节文档到底是什么?它是字节数组还是类似的?你能展示一下你是如何创建这个对象的吗?是的,还不清楚。。。你有什么意见?字节数组?流动它来自哪里?根据您对获取myByteDocument
代码的编辑,仍然不清楚它是什么DataRow.ItemArray[]
只返回一个对象。所以它仍然可以是任何东西。我猜这个文件是存储在数据库里的?如果是这样,它是如何存储的?在构建字符串时,应该考虑使用<代码> StringBuilder <代码>。pSuBee:忘记在此处添加CAST,(Byth[])行。ItEntry[0 ]。是的,它作为一个BLOB存储在数据库中。如果myByteDocument
是一个字符串,他可以使用StringReader
@JimMischel true,但是如果它是一个字符串
,那么它就有点违背了所有这些的目的,因为他只是试图将文件读入一个字符串。你的答案是我要说的,这就是为什么我高估了你。但是OP说他创建了一个字符串,做了一些替换,等等。我不清楚MyBytedDocument到底是什么,直到他最近的一次编辑。@JimMischel。我们只知道row.ItemArray[0]
返回一个对象,因此它可以是任何对象。我只是指出,如果它是一个字符串,那么使用StringReader将其转换为字符串将有点不合常规。是的,很抱歉忘记了有关“MyBytedDocument”类型的详细信息。我首先想到的是问题中说的。我很糟糕。如果myByteDocument
是一个字符串,他可以使用StringReader
@JimMischel true,但是如果它是字符串,那么它有点违背了所有这些的目的,因为他只是试图将文件读入字符串。你的答案是我要说的,这就是为什么我投票给你的原因。但是OP说他创建了一个字符串,做了一些替换,等等。我不清楚MyBytedDocument到底是什么,直到他最近的一次编辑。@JimMischel。我们只知道row.ItemArray[0]
返回一个对象,因此它可以是任何对象。我只是指出如果它是一个字符串,使用Str