2017-01-04 2 views
1

Я пытаюсь прочитать файл csv из магазина Azure File Store с помощью FileHelpers. Как это работает?Как читать поток из Azure File Store с помощью Filehelpers

Я могу подключиться к файловому хранилищу 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

Вы должны использовать BeginReadStream в FileHelperAsyncEngine

Он использует TextReader так что вам нужно сделать что-то вроде

TextReader tr = new StreamReader(destfile.OpenRead()); 

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

Спасибо! Так оно и было. – welleman

+0

Я также пытаюсь использовать FileHelpers, но из Azure Function, и я получаю Не могу загрузить файл или сборку «FileHelpers, Version = 3.1.5.0, Culture = neutral, PublicKeyToken = 3e0c08d59cc3d657» или одну из его зависимостей. Поскольку у него нет зависимостей, есть проблема с использованием библиотеки ... – Schenz

Смежные вопросы