使用FileStream直接读取一个字节文档(没有路径)

时间:2013-04-16 12:54:56

标签: c# filestream streamreader

我在变量中有一个字节文档,我想将其放入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

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

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

2 个答案:

答案 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);