如何将CloudFileStream转换为FileStream?

时间:2016-04-29 15:49:09

标签: c# azure filestream

我有一个使用IO.FileStream来读取文件的应用程序。我们正在将存储迁移到Azure文件存储。如何在c#中将CloudFileStream转换为IO.FileStream

2 个答案:

答案 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的CloudFileStreamhttps://msdn.microsoft.com/en-us/library/system.io.path.gettempfilename(v=vs.110).aspx

备注

  • 通常最好使用Stream作为大多数方法的参数,因为您将能够处理更多类型(包括这两个)。
  • 如果您计划在调用方法之前保留FileStream并将CloudFileStream的内容复制到lcal文件中或从lcal文件复制内容 - 使用Path.GetTemplFileName ans name创建临时文件并确保清理它们操作完成后。