2013-04-16 21 views
0

我在一个变量中有一个字节文件,我想把它放到FileStream中用于将它用于StreamReader用FileStream直接读取一个字节文件(不含路径)

我可以这样做吗?

我看到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变量的新文档,其中之类的文档,其中swStreamWriter

所以,我想直接读取文件,而不知道路径,但与字节文件。我可以这样做吗?

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

+1

究竟是什么字节文件?它是一个字节数组还是类似的东西?你能展示你如何创建这个对象myByteDocument吗? –

+0

是的,那还不清楚......你的意见是什么?字节数组?流?它从何而来? – ken2k

+0

根据你的代码编辑获得'myByteDocument',它仍然不清楚它是什么。 '的DataRow。ItemArray []'只是返回一个对象。所以它可能仍然是任何东西。我猜这个文件存储在数据库中?如果是这样,它是如何存储的? – psubsee2003

回答

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()方法不会发生异常。

+0

如果'myByteDocument'是一个字符串,他可以使用'StringReader'。 –

+0

@JimMischel是真的,但如果它是一个'String',那么它就会破坏所有这一切的目的,因为他只是试图将该文件读取到字符串中。 – psubsee2003

+0

你的回答就是我要说的,这就是为什么我赞成你的原因。但是OP说他创建了一个字符串,做了一些替换等。直到他最近的编辑,我都不清楚myByteDocument的真正含义。 –

1

你需要的是将你的字节数组转换为字符串,然后替换你所需要的,然后写出最终的结果。 你甚至不需要StreamReader或编写器来做到这一点。

看看这篇文章: How to convert byte[] to string?

在这里,你有不同的方法将文档转换为字符串。 接受答案的一个是:

string result = System.Text.Encoding.UTF8.GetString(myByteDocument) 

一旦你完成了所有的更换,只需保存串入一个文件,用类似的东西(最简单的办法):

File.WriteAllText(path, result);