2012-11-30 53 views
3

可能重复:
Convert a Stream to a FileStream in C#铸造流FILESTREAM

我的问题是关于流的FileStream的投...

基本上,我需要做的是让该文件的名称,因为如果我只有一个对象流它没有Name属性,当FileStream时...

那么如何正确地做到这一点,如何将Stream对象投射到FileStream ...?

另一个问题是,这个流来自webResponse.GetResponseStream(),如果我把它转换到FileStream我得到它是空的。基本上我也可以使用流,但我需要获取文件名。

我正在使用3.5

任何想法?

+1

阅读:http://stackoverflow.com/questions/3769067/convert-a-stream-to-a-filestream-in-c-sharp – Mate

+1

你想要做什么,如果流不*实际*一个'FileStream'? –

+0

如果使用.net 4.0,请使用Stream.CopyTo()。 Doc:http://msdn.microsoft.com/en-us/library/dd782932.aspx – Mate

回答

14

使用as运算符来执行演员表,如果Stream实际上不是FileStream,则将返回null而不是抛出异常。

Stream stream = ...; 
FileStream fileStream = stream as FileStream; 

if(fileStream != null) 
{ 
    //It was really a file stream, get your information here 
} 
else 
{ 
    //The stream was not a file stream, do whatever is required in that case 
} 
3

假设实际上流是文件流,下面应该做的伎俩:

var name = ((FileStream)stream).Name; 
2

选项1.如果你是肯定的,那Stream对象是FileStream

var fileStream = (FileStream)stream; 

选项2.如果你是而不是当然,那Stream对象是FileStream,但如果是的话,这将是有用的:

var fileStream = stream as FileStream; 
if (fileStream != null) 
{ 
    // specific stuff here 
} 

注意,即铸造更具体的类型通常是一个信号,仔细看一下你的代码,可能的话,要重构它。