将文件保存在树目录结构中

时间:2016-05-16 15:08:01

标签: c# xml azure

我在Azure Blob存储中有大量的XML文件。文件以树结构保存。有一个名为QA的根目录,然后在QA中我们有多年的子目录[例如:2015年,2016]。在每年的文件夹中,每个月都有子目录[例如:01,02,03 ... 12]。每个月内都有每天的子目录。我在这些日期文件夹中有这些xml文件。

我编写了一个解密,解压缩和处理这些xml文件的程序。我正在使用" useFlatBlobListing"属性列出所有blob并处理它们。

但是在处理了xml文件后,我想将它们存储在一个新的路径中,但是通过创建diretories的方式与源文件完全相同。

源文件的文件夹结构

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

我的计划:

var blobs = container.ListBlobs(prefix: InitialLocDir, useFlatBlobListing: true);  //Here the initialLoc is QA\
Console.WriteLine(blobs.Count());
foreach (CloudBlockBlob blob in blobs)
{
    FileName = blob.Uri.Segments.Last();
    blob.AcquireLease(TimeSpan.FromSeconds(15), null);

    MemoryStream sourceStream = new MemoryStream();

    blob.DownloadToStream(sourceStream);


    // Code - to decrypt-files//
    // Code to unzip and scrub the data//
// Do some updates/inserts using LINQ to XML.
    string finaldest = "NewFolderStruct/" + FileName;

     doc.Save(finaldest.xml); \\How to create the NewFolderStruct/ in exact same way ??
    // May be something like blob.UploadText(xDoc.ToString());          

2 个答案:

答案 0 :(得分:0)

不确定doc.Save()是什么(因为它没有显示在您的代码中),但您不能使用普通的文件i / o操作来创建blob或容器。为此,您需要使用Azure SDK(或REST调用)来创建和上传您的blob内容(以及从原始位置删除,如果这是您的应用所要求的)。

答案 1 :(得分:0)

根据您的意见,以下是您需要做的事情:

  • 由于您提到您没有将XML文件保存在磁盘上的任何位置,我猜您将其保存在内存中。您需要做的是为它创建一个MemoryStream类型的对象。我们称之为memoryStremForNewXMLFile
  • 接下来,您将创建CloudBlockBlob的实例。这是将在blob存储中上传的那个。由于您希望保持相同的文件夹结构,但将QA目录更改为Safe,以下是如何创建它的实例:

    var newBlob = container.GetBlockBlobReference(blob.Name.Replace("QA/", "Safe/"));

  • 最后,您要将流上传到此blob。

    newBlob.UploadFromStream(memoryStremForNewXMLFile)

请确保将memoryStremForNewXMLFile的位置重置为流的开头,否则您上传的文件将为零字节。