如何使用Filehelpers从Azure文件存储中读取流

时间:2017-01-04 20:10:56

标签: c# csv azure azure-storage filehelpers

我正在尝试使用FileHelpers从Azure文件存储中读取csv文件。这是如何工作的?

我可以连接到azure文件存储并构建对te文件的引用。这是通过循环遍历目录和文件来完成的,在这个例子中,它们被命名为子目录和文件名。

代码:

//connect to storage account
CloudStorageAccount storageAccount = new CloudStorageAccount("link to account and credentials");
//connect to file client
CloudFileClient fileClient = storageAccount.CreateCloudFileClient();
//create cloudfileshare to in process
CloudFileShare inprocessShare = fileClient.GetShareReference("inprocess");
//get reference to root directory of inprocess share
CloudFileDirectory inprocessRootDir = inprocessShare.GetRootDirectoryReference();
//get reference to the subdirectory
CloudFileDirectory inprocessDir = inprocessRootDir.GetDirectoryReference(subdirectory);
//get reference to the current file 
CloudFile destfile = inprocessDir.GetFileReference(filename);

这可以获取对我要处理的文件的引用。

当我使用StreamReader时,我可以使用以下代码,这可以工作:

\\open stream
System.IO.Stream filepath = destfile.OpenRead()
\\read the file
System.IO.StreamReader file = new System.IO.StreamReader(filepath)

但我想使用FileHelpers,我尝试了以下内容:

\\create async filehelper
FileHelperAsyncEngine fhe = new FileHelperAsyncEngine<MyType>();
using (fhe.BeginReadFile(filepath))

这给出了它只接受字符串作为输入的错误。当我输入对像“C:\ inprocess \ filename.csv”这样的本地文件的引用时,它可以工作。当我将完整的URL放到文件中时,我得到的错误是无法解析连接。我还尝试将Azure文件共享映射到本地驱动器。这可行,但我希望它是一个云应用程序,因为它适用于StreamReader,我认为它也适用于FileHelpers。

1 个答案:

答案 0 :(得分:1)

您必须使用FileHelperAsyncEngine的BeginReadStream

它使用TextReader,因此您需要执行类似

的操作
TextReader tr = new StreamReader(destfile.OpenRead());

using (fhe.BeginReadStream(tr))
{
   foreach(var record in fhe)
   {
   ...
   }
}