使用 .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 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。