使用 .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 上帐户管理作。
先决条件
Visual Studio 2013 或更高版本。 本文中的说明使用 Visual Studio 2019。
Azure 订阅。 请参阅获取 Azure 免费试用版。
Azure Data Lake Storage Gen1 帐户。 有关如何创建帐户的说明,请参阅 Azure Data Lake Storage Gen1入门。
创建 .NET 应用程序
GitHub 上提供的代码示例 指导你完成在存储中创建文件、连接文件、下载文件以及删除存储中的某些文件的过程。 本文的这一部分将指导你完成代码的主要部分。
在 Visual Studio 中,依次选择“文件”菜单、“新建”,然后选择“项目”。
选择“控制台应用(.NET Framework)”,然后选择“下一步”。
在“项目名称”中,输入
CreateADLApplication
,然后选择“创建”。将 NuGet 包添加到项目。
在解决方案资源管理器中右键单击项目名称,单击“管理 NuGet 包” 。
在“NuGet 包管理器”选项卡中,确保 包源 设置为 nuget.org。此外,请确保选中“包括预发行版”复选框。
搜索并安装以下 NuGet 包:
-
Microsoft.Azure.DataLake.Store
- 本文使用 v1.0.0。 -
Microsoft.Rest.ClientRuntime.Azure.Authentication
- 本文使用 v2.3.1。
关闭“NuGet 包管理器”。
-
打开“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;
声明变量,如下所示,并提供占位符的值。 此外,请确保计算机上存在此处提供的本地路径和文件名。
namespace SdkSample { class Program { private static string _adlsg1AccountName = "<DATA-LAKE-STORAGE-GEN1-NAME>.azuredatalakestore.net"; } }
本文的其余部分介绍如何使用可用的 .NET 方法执行身份验证、文件上传等作。
身份验证
- 有关应用程序的最终用户身份验证,请参阅 使用 .NET SDK通过 Data Lake Storage Gen1 进行最终用户身份验证。
- 有关应用程序的服务到服务身份验证,请参阅 使用 .NET SDK 通过 Data Lake Storage Gen1 的服务到服务身份验证。
创建客户端对象
以下代码片段创建 Data Lake Storage Gen1 文件系统客户端对象,该对象用于向服务发出请求。
// 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);
PrintDirectoryEntry
方法的定义作为 GitHub 上示例的一部分提供。
重命名文件
以下代码片段重命名 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);
}
PrintDirectoryEntry
方法的定义作为 GitHub 上示例的一部分提供。
以递归方式删除目录
以下代码片段以递归方式删除目录及其所有子目录。
// Delete a directory and all its subdirectories and files
client.DeleteRecursive("/Test");
示例
下面是一些示例,演示如何使用 Data Lake Storage Gen1 文件系统 SDK。
- GitHub 上的 基本示例
- GitHub 上的高级示例