我有一个使用IO.FileStream
来读取文件的应用程序。我们正在将存储迁移到Azure文件存储。如何在c#中将CloudFileStream
转换为IO.FileStream
?
答案 0 :(得分:1)
根据您的目的,有两种可能的答案,
如果你想编写一个可以使用两种类型的流的类,那么最简单的方法是将该类基于所有流共有的抽象stream类
如果您想将数据从一个流复制到另一个流,那么您可以使用CopyTo function但需要.Net4或更高版本
来自MSDN
// Create the streams.
MemoryStream destination = new MemoryStream();
using (FileStream source = File.Open(@"c:\temp\data.dat",
FileMode.Open))
{
Console.WriteLine("Source length: {0}", source.Length.ToString());
// Copy source to destination.
source.CopyTo(destination);
}
Console.WriteLine("Destination length: {0}", destination.Length.ToString());
答案 1 :(得分:0)
由于这些类是兄弟姐妹(两者都来自Stream
)并且没有父/子关系,因此没有直接的方法将其转换为另一种。您需要使用本地文件来使用FileStream
,然后复制到Azure的CloudFileStream。https://msdn.microsoft.com/en-us/library/system.io.path.gettempfilename(v=vs.110).aspx)
备注
Stream
作为大多数方法的参数,因为您将能够处理更多类型(包括这两个)。FileStream
并将CloudFileStream
的内容复制到lcal文件中或从lcal文件复制内容 - 使用Path.GetTemplFileName ans name创建临时文件并确保清理它们操作完成后。