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