使用 .NET SDK 在 Data Lake Storage Gen1 上执行文件系统操作

本文介绍如何使用 .NET SDK 在 Data Lake Storage Gen1 上执行文件系统操作。 文件系统操作包括在 Data Lake Storage Gen1 帐户中创建文件夹、上传文件、下载文件,等等。

若要了解如何使用 .NET SDK 对 Data Lake Storage Gen1 执行帐户管理操作,请参阅使用 .NET SDK 对 Data Lake Storage Gen1 执行帐户管理操作

先决条件

创建 .NET 应用程序

GitHub 上的代码示例逐步讲解了在存储中创建文件、连接文件、下载文件以及在存储中删除某些文件的过程。 本文的此部分演练代码的主要组成部分。

  1. 在 Visual Studio 中,依次选择“文件”菜单、“新建”,然后选择“项目”。

  2. 选择“控制台应用(.NET Framework)”,然后选择“下一步” 。

  3. 在“项目名称”中,输入 CreateADLApplication,然后选择“创建”

  4. 将 NuGet 包添加到项目。

    1. 在解决方案资源管理器中右键单击项目名称,单击“管理 NuGet 包”

    2. 在“NuGet 包管理器”选项卡上,确保“包源”设置为“nuget.org” 。此外,确保“包括预发行版”复选框已选中。

    3. 搜索并安装以下 NuGet 包:

      • Microsoft.Azure.DataLake.Store - 本文使用的是 v1.0.0。
      • Microsoft.Rest.ClientRuntime.Azure.Authentication - 本文使用的是 v2.3.1。

      关闭“NuGet 包管理器”。

  5. 打开“Program.cs” ,删除现有代码,并包含以下语句,添加对命名空间的引用。

    using System;
    using System.IO;using System.Threading;
    using System.Linq;
    using System.Text;
    using System.Collections.Generic;
    using System.Security.Cryptography.X509Certificates; // Required only if you're using an Azure AD application created with certificates
    
    using Microsoft.Rest;
    using Microsoft.Rest.Azure.Authentication;
    using Microsoft.Azure.DataLake.Store;
    using Microsoft.IdentityModel.Clients.ActiveDirectory;
    
  6. 声明变量(如下所示),并提供占位符的值。 此外,确保计算机中存在此处提供的本地路径和文件名。

    namespace SdkSample
    {
        class Program
        {
            private static string _adlsg1AccountName = "<DATA-LAKE-STORAGE-GEN1-NAME>.azuredatalakestore.net";
        }
    }
    

本文的剩余部分介绍如何使用现有的 .NET 方法来执行操作,例如身份验证和文件上传等。

身份验证

创建客户端对象

以下代码片段创建了 Data Lake Storage Gen1 filesystem 客户端对象,用于向服务发出请求。

// Create client objects
AdlsClient client = AdlsClient.CreateClient(_adlsg1AccountName, adlCreds);

创建文件和目录

将以下代码片段添加到应用程序。 此代码片段添加一个文件,以及不存在的任何父目录。

// Create a file - automatically creates any parent directories that don't exist
// The AdlsOutputStream preserves record boundaries - it does not break records while writing to the store

using (var stream = client.CreateFile(fileName, IfExists.Overwrite))
{
    byte[] textByteArray = Encoding.UTF8.GetBytes("This is test data to write.\r\n");
    stream.Write(textByteArray, 0, textByteArray.Length);

    textByteArray = Encoding.UTF8.GetBytes("This is the second line.\r\n");
    stream.Write(textByteArray, 0, textByteArray.Length);
}

附加到文件

以下代码片段将数据附加到 Data Lake Storage Gen1 帐户中的现有文件。

// Append to existing file

using (var stream = client.GetAppendStream(fileName))
{
    byte[] textByteArray = Encoding.UTF8.GetBytes("This is the added line.\r\n");
    stream.Write(textByteArray, 0, textByteArray.Length);
}

读取文件

以下代码片段读取 Data Lake Storage Gen1 中文件的内容。

//Read file contents

using (var readStream = new StreamReader(client.GetReadStream(fileName)))
{
    string line;
    while ((line = readStream.ReadLine()) != null)
    {
        Console.WriteLine(line);
    }
}

获取文件属性

以下代码片段返回与文件或目录关联的属性。

// Get file properties
var directoryEntry = client.GetDirectoryEntry(fileName);
PrintDirectoryEntry(directoryEntry);

Github 上的示例中提供了 PrintDirectoryEntry 方法的定义。

重命名文件

以下代码片段重命名 Data Lake Storage Gen1 帐户中的现有文件。

// Rename a file
string destFilePath = "/Test/testRenameDest3.txt";
client.Rename(fileName, destFilePath, true);

枚举目录

以下代码片段枚举 Data Lake Storage Gen1 帐户中的目录。

// Enumerate directory
foreach (var entry in client.EnumerateDirectory("/Test"))
{
    PrintDirectoryEntry(entry);
}

Github 上的示例中提供了 PrintDirectoryEntry 方法的定义。

以递归方式删除目录

以下代码片段以递归方式删除目录及其所有子目录。

// Delete a directory and all its subdirectories and files
client.DeleteRecursive("/Test");

示例

下面是一些示例,介绍了如何使用 Data Lake Storage Gen1 文件系统 SDK。

另请参阅

后续步骤