У меня есть тонны XML-файлов в хранилище Azure Blob. Файлы сохраняются в древовидной структуре. Имея корневой каталог под названием QA, тогда в QA мы имеем подкаталоги в течение лет [Eg: 2015, 2016]. И в папке каждого года есть подкаталоги для каждого месяца [например: 01,02, 03 ... 12]. Внутри каждого месяца есть подкаталоги для каждого дня. У меня есть эти xml-файлы в этих дневных папках.Loop через древовидную структуру каталогов в Azure
Я написал код для обработки xml-файлов и сохранил их в том же месте, но код, который я написал, работает только в том случае, если я показываю точный каталог, где присутствуют файлы, он не перебирается во внутренние каталоги. Как сделать это через каждый из этих подкаталогов и файлов.
QA\2015\01\01\file1<datetimestamp>.xml
-------01\file2<datetimestamp>.xml
-------01\file3<datetimestamp>.xml
------\01\02\file1<datetimestamp>.xml
------\01\02\file2<datetimestamp>.xml
...
...
...
------\02\01\file1<datetimestamp>.xml
...
...
...
QA\2016\01\01\file1<datetimestamp>.xml
-------01\file2<datetimestamp>.xml
-------01\file3<datetimestamp>.xml
------\01\02\file1<datetimestamp>.xml
------\01\02\file2<datetimestamp>.xml
...
...
...
------\02\01\file1<datetimestamp>.xml
Я ищу какой-нибудь способ реализации кода, как
for (year)
{
for (month)
{
for day
<My code goes here - pick the files scrub unnecessary data and save as a new file in same location>
--- Now I need to fiigure out how to save in same location as well
}
}
Кроме того, это не работает для меня: var blobs = container.ListBlobs(prefix: "container-directory", useFlatBlobListing: true);
как я не листинга. Я хочу, чтобы Гото каждый каталог и обрабатывать файлы
Моего код: не получите ничего, кроме ошибка
CloudBlobClient bc = sa.CreateCloudBlobClient();
// Get a reference to the container
CloudBlobContainer container = bc.GetContainerReference(ContainerNameStr);
var blobs = bc.ListBlobs(prefix: InitialLocDir, useFlatBlobListing: true, blobListingDetails: BlobListingDetails.Metadata);
foreach (CloudBlockBlob blob in blobs)
{
blob.AcquireLease(TimeSpan.FromSeconds(15), null);
var blocks = blob.DownloadBlockList(BlockListingFilter.Committed).ToList();
foreach (var block in blocks)
{
MemoryStream sourceStream = new MemoryStream();
blob.DownloadRangeToStream(sourceStream, 0, block.Length);
// Modify the stream here
Gpg gpg1 = new Gpg();
MemoryStream destStream = new MemoryStream();
gpg1.Passphrase = Phrase;
gpg1.BinaryPath = @"C:/Program Files (x86)/GNU/GnuPG/gpg2.exe";
sourceStream.Position = 0;
gpg1.Decrypt(sourceStream, destStream);
destStream.Position = 0;
StreamReader reader = new StreamReader(destStream);
string xmlfile = "";
xmlfile = reader.ReadToEnd();
blob.PutBlock(block.Name, destStream, null, null, null, null);
Console.WriteLine(xmlfile);
}
Console.Read();
blob.PutBlockList(blocks, null, null, null);
}
Итак, если я правильно понял ваш вопрос, вы хотите сначала указать подкаталоги на год, а затем за каждый год вы хотите перечислить подкаталоги в течение нескольких месяцев и сделать то же самое в течение нескольких дней в месяц. Только после этого вы хотите перечислить файлы и обработать эти файлы. Правильно ли я понимаю? –
Ну, файлы присутствуют только во внутренней папке, которая является дневной папкой. Код, который я написал, работает только для определенного каталога. И да, ваше понимание правильное. Обновлен вопрос с моим кодом. – HadoopAddict
@GauravMantri: Я хочу, чтобы программа передавала путь как getdirectory (QA/2015/01) внутри цикла for. – HadoopAddict