Разработка для службы файлов Azure с помощью .NETDevelop for Azure Files with .NET

Изучите основы разработки приложений .NET, использующих службы файлов Azure для хранения данных.Learn the basics of developing .NET applications that use Azure Files to store data. В этой статье показано, как создать простое консольное приложение для следующих действий с .NET и службой файлов Azure.This article shows how to create a simple console application to do the following with .NET and Azure Files:

  • Получение содержимого файла.Get the contents of a file.
  • Установите максимальный размер или квоту для файлового ресурса.Set the maximum size, or quota, for a file share.
  • Создайте подписанный URL-адрес (SAS) для файла.Create a shared access signature (SAS) for a file.
  • Скопируйте файл в другой файл в той же учетной записи храненияCopy a file to another file in the same storage account.
  • Скопируйте файл в BLOB-объект в той же учетной записи храненияCopy a file to a blob in the same storage account.
  • Создайте моментальный снимок файлового ресурса.Create a snapshot of a file share.
  • Восстановление файла из моментального снимка общего ресурса.Restore a file from a share snapshot.
  • Используйте метрики службы хранилища Azure для устранения неполадок.Use Azure Storage Metrics for troubleshooting.

Дополнительные сведения о службе файлов Azure см. в статье что такое служба файлов Azure?To learn more about Azure Files, see What is Azure Files?

Совет

См. примеры кода в репозитории службы хранилища AzureCheck out the Azure Storage code samples repository

Полные и простые в применении примеры кода для службы хранилища Azure можно скачать и запустить отсюда.For easy-to-use end-to-end Azure Storage code samples that you can download and run, please check out our list of Azure Storage Samples.

Основные сведения об API-интерфейсах .NETUnderstanding the .NET APIs

Служба файлов Azure предлагает два широких подхода к использованию клиентских приложений: SMB (блок сообщений сервера) и REST.Azure Files provides two broad approaches to client applications: Server Message Block (SMB) and REST. В .NET API- System.IO интерфейсы и представляют собой Azure.Storage.Files.Shares абстрактные подходы.Within .NET, the System.IO and Azure.Storage.Files.Shares APIs abstract these approaches.

APIAPI НазначениеWhen to use ПримечанияNotes
System.IOSystem.IO Требования вашего приложения:Your application:
  • Требуется чтение и запись файлов с помощью SMBNeeds to read/write files by using SMB
  • выполнение на устройстве, которое получает доступ к учетной записи службы файлов Azure через порт 445;Is running on a device that has access over port 445 to your Azure Files account
  • не требуется управлять параметрами администрирования общей папки.Doesn't need to manage any of the administrative settings of the file share
Файловый ввод-вывод, реализованный в службе файлов Azure по протоколу SMB, обычно аналогичен вводу-выводу с любым сетевым файловым ресурсом или локальным устройством хранения.File I/O implemented with Azure Files over SMB is generally the same as I/O with any network file share or local storage device. Общие сведения о ряде функций .NET, включая ввод-вывод файлов, см. в руководстве по консольному приложению .For an introduction to a number of features in .NET, including file I/O, see the Console Application tutorial.
Azure. Storage. Files. SharesAzure.Storage.Files.Shares Требования вашего приложения:Your application:
  • Не удается получить доступ к службе файлов Azure по протоколу SMB через порт 445 из-за ограничений брандмауэра или поставщика услуг Интернета.Can't access Azure Files by using SMB on port 445 because of firewall or ISP constraints
  • требуются административные функции, например возможность задать квоту для общей папки или создать подписанный URL-адрес.Requires administrative functionality, such as the ability to set a file share's quota or create a shared access signature
В этой статье показано использование Azure.Storage.Files.Shares операций файлового ввода-вывода с помощью функции RESTful вместо протокола SMB и управления файловым ресурсом.This article demonstrates the use of Azure.Storage.Files.Shares for file I/O using REST instead of SMB and management of the file share.

Создание консольного приложения и получение сборкиCreate the console application and obtain the assembly

Клиентскую библиотеку службы файлов Azure можно использовать в любом типе приложения .NET.You can use the Azure Files client library in any type of .NET app. Эти приложения включают в себя облачные, веб-, классические и мобильные приложения Azure.These apps include Azure cloud, web, desktop, and mobile apps. В этом руководством мы создадим консольное приложение для простоты.In this guide, we create a console application for simplicity.

В Visual Studio создайте новое консольное приложение Windows.In Visual Studio, create a new Windows console application. Ниже показано, как создать консольное приложение в Visual Studio 2019.The following steps show you how to create a console application in Visual Studio 2019. Эти же действия можно выполнить и в других версиях Visual Studio.The steps are similar in other versions of Visual Studio.

  1. Запустите Visual Studio и щелкните Создать проектStart Visual Studio and select Create a new project.
  2. В окне Создание нового проекта выберите консольное приложение (платформа .NET Framework) для C#, а затем нажмите кнопку Далее.In Create a new project, choose Console App (.NET Framework) for C#, and then select Next.
  3. В окне Настройка нового проекта введите имя приложения и нажмите кнопку создать.In Configure your new project, enter a name for the app, and select Create.

Добавьте все примеры кода из этой статьи в Program класс в файле Program. CS .Add all the code examples in this article to the Program class in the Program.cs file.

Установка необходимых пакетов с помощью NuGetUse NuGet to install the required packages

Ссылки на эти пакеты в проекте:Refer to these packages in your project:

Для получения пакетов можно использовать NuGet.You can use NuGet to obtain the packages. Выполните следующие действия.Follow these steps:

  1. В Обозреватель решений щелкните правой кнопкой мыши проект и выберите Управление пакетами NuGet.In Solution Explorer, right-click your project and choose Manage NuGet Packages.

  2. В разделе Диспетчер пакетов NuGet выберите Обзор.In NuGet Package Manager, select Browse. Затем найдите и выберите Azure. Core, а затем нажмите кнопку установить.Then search for and choose Azure.Core, and then select Install.

    На этом шаге выполняется установка пакета и его зависимостей.This step installs the package and its dependencies.

  3. Найдите и установите такие пакеты:Search for and install these packages:

    • Azure. Storage. BLOBAzure.Storage.Blobs
    • Azure. Storage. Files. SharesAzure.Storage.Files.Shares
    • System.Configuration.ConfigurationManagerSystem.Configuration.ConfigurationManager

Сохранение учетных данных учетной записи хранения в файл App.configSave your storage account credentials to the App.config file

Затем сохраните учетные данные в файле App.config проекта.Next, save your credentials in your project's App.config file. В Обозреватель решений дважды щелкните App.config и измените файл, чтобы он был похож на следующий пример.In Solution Explorer, double-click App.config and edit the file so that it is similar to the following example.

Замените myaccount именем вашей учетной записи хранения и mykey ключом учетной записи хранения.Replace myaccount with your storage account name and mykey with your storage account key.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings>
    <add key="StorageConnectionString" 
      value="DefaultEndpointsProtocol=https;AccountName=myaccount;AccountKey=mykey;EndpointSuffix=core.windows.net" />
    <add key="StorageAccountName" value="myaccount" />
    <add key="StorageAccountKey" value="mykey" />
  </appSettings>
</configuration>

Примечание

Эмулятор хранения Азурите в настоящее время не поддерживает службы файлов Azure. Для работы с файлами Azure ваша строка подключения должна быть нацелена на учетную запись хранения Azure в облаке.Your connection string must target an Azure storage account in the cloud to work with Azure Files.

Добавление директив usingAdd using directives

В Обозреватель решений откройте файл Program. CS и добавьте следующие директивы using в начало файла.In Solution Explorer, open the Program.cs file, and add the following using directives to the top of the file.

using System;
using System.Configuration;
using System.IO;
using System.Threading.Tasks;
using Azure;
using Azure.Storage;
using Azure.Storage.Blobs;
using Azure.Storage.Files.Shares;
using Azure.Storage.Files.Shares.Models;
using Azure.Storage.Sas;

Доступ к общей папке программным путемAccess the file share programmatically

В файле Program. CS добавьте следующий код для программного доступа к общей папке.In the Program.cs file, add the following code to access the file share programmatically.

Следующий метод создает общую папку, если она еще не существует.The following method creates a file share if it doesn't already exist. Метод начинается с создания объекта шареклиент из строки подключения.The method starts by creating a ShareClient object from a connection string. Затем в примере выполняется попытка загрузить созданный ранее файл.The sample then attempts to download a file we created earlier. Вызовите этот метод из Main() .Call this method from Main().

//-------------------------------------------------
// Create a file share
//-------------------------------------------------
public async Task CreateShareAsync(string shareName)
{
    // Get the connection string from app settings
    string connectionString = ConfigurationManager.AppSettings["StorageConnectionString"];

    // Instantiate a ShareClient which will be used to create and manipulate the file share
    ShareClient share = new ShareClient(connectionString, shareName);

    // Create the share if it doesn't already exist
    await share.CreateIfNotExistsAsync();

    // Ensure that the share exists
    if (await share.ExistsAsync())
    {
        Console.WriteLine($"Share created: {share.Name}");

        // Get a reference to the sample directory
        ShareDirectoryClient directory = share.GetDirectoryClient("CustomLogs");

        // Create the directory if it doesn't already exist
        await directory.CreateIfNotExistsAsync();

        // Ensure that the directory exists
        if (await directory.ExistsAsync())
        {
            // Get a reference to a file object
            ShareFileClient file = directory.GetFileClient("Log1.txt");

            // Ensure that the file exists
            if (await file.ExistsAsync())
            {
                Console.WriteLine($"File exists: {file.Name}");

                // Download the file
                ShareFileDownloadInfo download = await file.DownloadAsync();

                // Save the data to a local file, overwrite if the file already exists
                using (FileStream stream = File.OpenWrite(@"downloadedLog1.txt"))
                {
                    await download.Content.CopyToAsync(stream);
                    await stream.FlushAsync();
                    stream.Close();

                    // Display where the file was saved
                    Console.WriteLine($"File downloaded: {stream.Name}");
                }
            }
        }
    }
    else
    {
        Console.WriteLine($"CreateShareAsync failed");
    }
}

Установка максимального размера для файлового ресурсаSet the maximum size for a file share

Начиная с версии 5. x клиентской библиотеки файлов Azure, можно задать квоту (максимальный размер) для общей папки.Beginning with version 5.x of the Azure Files client library, you can set the quota (maximum size) for a file share. Можно также проверить, какой объем данных хранится в настоящее время в общей папке.You can also check to see how much data is currently stored on the share.

Задание квоты для общего ресурса ограничивает общий размер файлов, хранящихся в общей папке.Setting the quota for a share limits the total size of the files stored on the share. Если общий размер файлов в общей папке превышает квоту, клиенты не могут увеличить размер существующих файлов.If the total size of files on the share exceeds the quota, clients can't increase the size of existing files. Клиенты также не могут создавать новые файлы, если эти файлы не являются пустыми.Clients also can't create new files, unless those files are empty.

В приведенном ниже примере показано, как проверить текущее использование данных в файловом ресурсе, а также задать для него квоту.The example below shows how to check the current usage for a share and how to set the quota for the share.

//-------------------------------------------------
// Set the maximum size of a share
//-------------------------------------------------
public async Task SetMaxShareSizeAsync(string shareName, int increaseSizeInGiB)
{
    const long ONE_GIBIBYTE = 10737420000; // Number of bytes in 1 gibibyte

    // Get the connection string from app settings
    string connectionString = ConfigurationManager.AppSettings["StorageConnectionString"];

    // Instantiate a ShareClient which will be used to access the file share
    ShareClient share = new ShareClient(connectionString, shareName);

    // Create the share if it doesn't already exist
    await share.CreateIfNotExistsAsync();

    // Ensure that the share exists
    if (await share.ExistsAsync())
    {
        // Get and display current share quota
        ShareProperties properties = await share.GetPropertiesAsync();
        Console.WriteLine($"Current share quota: {properties.QuotaInGB} GiB");

        // Get and display current usage stats for the share
        ShareStatistics stats = await share.GetStatisticsAsync();
        Console.WriteLine($"Current share usage: {stats.ShareUsageInBytes} bytes");

        // Convert current usage from bytes into GiB
        int currentGiB = (int)(stats.ShareUsageInBytes / ONE_GIBIBYTE);

        // This line sets the quota to be the current 
        // usage of the share plus the increase amount
        await share.SetQuotaAsync(currentGiB + increaseSizeInGiB);

        // Get the new quota and display it
        properties = await share.GetPropertiesAsync();
        Console.WriteLine($"New share quota: {properties.QuotaInGB} GiB");
    }
}

Создание подписи общего доступа для файла или файлового ресурсаGenerate a shared access signature for a file or file share

Начиная с версии 5. x клиентской библиотеки службы файлов Azure вы можете создать подписанный URL-адрес (SAS) для общей папки или отдельного файла.Beginning with version 5.x of the Azure Files client library, you can generate a shared access signature (SAS) for a file share or for an individual file.

В следующем примере метод возвращает SAS для файла в указанной общей папке.The following example method returns a SAS on a file in the specified share.

//-------------------------------------------------
// Create a SAS URI for a file
//-------------------------------------------------
public Uri GetFileSasUri(string shareName, string filePath, DateTime expiration, ShareFileSasPermissions permissions)
{
    // Get the account details from app settings
    string accountName = ConfigurationManager.AppSettings["StorageAccountName"];
    string accountKey = ConfigurationManager.AppSettings["StorageAccountKey"];

    ShareSasBuilder fileSAS = new ShareSasBuilder()
    {
        ShareName = shareName,
        FilePath = filePath,

        // Specify an Azure file resource
        Resource = "f",

        // Expires in 24 hours
        ExpiresOn = expiration
    };

    // Set the permissions for the SAS
    fileSAS.SetPermissions(permissions);

    // Create a SharedKeyCredential that we can use to sign the SAS token
    StorageSharedKeyCredential credential = new StorageSharedKeyCredential(accountName, accountKey);

    // Build a SAS URI
    UriBuilder fileSasUri = new UriBuilder($"https://{accountName}.file.core.windows.net/{fileSAS.ShareName}/{fileSAS.FilePath}");
    fileSasUri.Query = fileSAS.ToSasQueryParameters(credential).ToString();

    // Return the URI
    return fileSasUri.Uri;
}

Дополнительные сведения о создании и использовании подписанных URL-отправок см. в статье как работает подпись общего доступа.For more information about creating and using shared access signatures, see How a shared access signature works.

Копирование файловCopy files

Начиная с версии 5. x клиентской библиотеки службы файлов Azure можно скопировать файл в другой файл, файл в большой двоичный объект или большой двоичный объект в файл.Beginning with version 5.x of the Azure Files client library, you can copy a file to another file, a file to a blob, or a blob to a file.

AzCopy также можно использовать для копирования одного файла в другой или для копирования большого двоичного объекта в файл или наоборот.You can also use AzCopy to copy one file to another or to copy a blob to a file or the other way around. См. подробнее о начале работы с AzCopy.See Get started with AzCopy.

Примечание

При копировании большого двоичного объекта в файл или файла в большой двоичный объект необходимо использовать подписанный URL-адрес (SAS) для авторизации доступа к исходному объекту, даже если копирование производится внутри одной и той же учетной записи хранения.If you are copying a blob to a file, or a file to a blob, you must use a shared access signature (SAS) to authorize access to the source object, even if you are copying within the same storage account.

Копирование файла в другой файлCopy a file to another file

В приведенном ниже примере файл копируется в другой файл в той же общей папке.The following example copies a file to another file in the same share. Для копирования можно использовать проверку подлинности с помощью общего ключа , так как эта операция копирует файлы в одну и ту же учетную запись хранения.You can use Shared Key authentication to do the copy because this operation copies files within the same storage account.

//-------------------------------------------------
// Copy file within a directory
//-------------------------------------------------
public async Task CopyFileAsync(string shareName, string sourceFilePath, string destFilePath)
{
    // Get the connection string from app settings
    string connectionString = ConfigurationManager.AppSettings["StorageConnectionString"];

    // Get a reference to the file we created previously
    ShareFileClient sourceFile = new ShareFileClient(connectionString, shareName, sourceFilePath);

    // Ensure that the source file exists
    if (await sourceFile.ExistsAsync())
    {
        // Get a reference to the destination file
        ShareFileClient destFile = new ShareFileClient(connectionString, shareName, destFilePath);

        // Start the copy operation
        await destFile.StartCopyAsync(sourceFile.Uri);

        if (await destFile.ExistsAsync())
        {
            Console.WriteLine($"{sourceFile.Uri} copied to {destFile.Uri}");
        }
    }
}

Копирование файла в большой двоичный объектCopy a file to a blob

В приведенном ниже примере файл создается и копируется в большой двоичный объект в пределах одной и той же учетной записи хранения.The following example creates a file and copies it to a blob within the same storage account. В примере для исходного файла создается SAS, который служба использует для авторизации доступа к исходному файлу во время операции копирования.The example creates a SAS for the source file, which the service uses to authorize access to the source file during the copy operation.

//-------------------------------------------------
// Copy a file from a share to a blob
//-------------------------------------------------
public async Task CopyFileToBlobAsync(string shareName, string sourceFilePath, string containerName, string blobName)
{
    // Get a file SAS from the method created ealier
    Uri fileSasUri = GetFileSasUri(shareName, sourceFilePath, DateTime.UtcNow.AddHours(24), ShareFileSasPermissions.Read);

    // Get a reference to the file we created previously
    ShareFileClient sourceFile = new ShareFileClient(fileSasUri);

    // Ensure that the source file exists
    if (await sourceFile.ExistsAsync())
    {
        // Get the connection string from app settings
        string connectionString = ConfigurationManager.AppSettings["StorageConnectionString"];

        // Get a reference to the destination container
        BlobContainerClient container = new BlobContainerClient(connectionString, containerName);

        // Create the container if it doesn't already exist
        await container.CreateIfNotExistsAsync();

        BlobClient destBlob = container.GetBlobClient(blobName);

        await destBlob.StartCopyFromUriAsync(sourceFile.Uri);

        if (await destBlob.ExistsAsync())
        {
            Console.WriteLine($"File {sourceFile.Name} copied to blob {destBlob.Name}");
        }
    }
}

Таким же образом можно скопировать BLOB-объект в файл.You can copy a blob to a file in the same way. Если исходным объектом является большой двоичный объект, создайте SAS для авторизации доступа к этому объекту во время операции копирования.If the source object is a blob, then create a SAS to authorize access to that blob during the copy operation.

Моментальные снимки общих ресурсовShare snapshots

Начиная с версии 8,5 клиентской библиотеки файлов Azure, можно создать моментальный снимок общего ресурса.Beginning with version 8.5 of the Azure Files client library, you can create a share snapshot. Можно также получить список моментальных снимков общих ресурсов, просмотреть и удалить их.You can also list or browse share snapshots and delete share snapshots. После создания моментальные снимки общих ресурсов доступны только для чтения.Once created, share snapshots are read-only.

Создание моментальных снимков общих ресурсовCreate share snapshots

В следующем примере создается моментальный снимок общего файлового ресурса.The following example creates a file share snapshot.

//-------------------------------------------------
// Create a share snapshot
//-------------------------------------------------
public async Task CreateShareSnapshotAsync(string shareName)
{
    // Get the connection string from app settings
    string connectionString = ConfigurationManager.AppSettings["StorageConnectionString"];

    // Instatiate a ShareServiceClient
    ShareServiceClient shareServiceClient = new ShareServiceClient(connectionString);

    // Instantiate a ShareClient which will be used to access the file share
    ShareClient share = shareServiceClient.GetShareClient(shareName);

    // Ensure that the share exists
    if (await share.ExistsAsync())
    {
        // Create a snapshot
        ShareSnapshotInfo snapshotInfo = await share.CreateSnapshotAsync();
        Console.WriteLine($"Snapshot created: {snapshotInfo.Snapshot}");
    }
}

Вывод списка моментальных снимков общих ресурсовList share snapshots

В следующем примере перечисляются моментальные снимки в общей папке.The following example lists the snapshots on a share.

//-------------------------------------------------
// List the snapshots on a share
//-------------------------------------------------
public void ListShareSnapshots()
{
    // Get the connection string from app settings
    string connectionString = ConfigurationManager.AppSettings["StorageConnectionString"];

    // Instatiate a ShareServiceClient
    ShareServiceClient shareServiceClient = new ShareServiceClient(connectionString);

    // Display each share and the snapshots on each share
    foreach (ShareItem item in shareServiceClient.GetShares(ShareTraits.All, ShareStates.Snapshots))
    {
        if (null != item.Snapshot)
        {
            Console.WriteLine($"Share: {item.Name}\tSnapshot: {item.Snapshot}");
        }
    }
}

Вывод списка файлов и каталогов в моментальных снимках общего ресурсаList files and directories within share snapshots

В следующем примере производится просмотр файлов и каталогов в моментальных снимках общего ресурса.The following example browses files and directories within share snapshots.

//-------------------------------------------------
// List the snapshots on a share
//-------------------------------------------------
public void ListSnapshotContents(string shareName, string snapshotTime)
{
    // Get the connection string from app settings
    string connectionString = ConfigurationManager.AppSettings["StorageConnectionString"];

    // Instatiate a ShareServiceClient
    ShareServiceClient shareService = new ShareServiceClient(connectionString);

    // Get a ShareClient
    ShareClient share = shareService.GetShareClient(shareName);

    Console.WriteLine($"Share: {share.Name}");

    // Get as ShareClient that points to a snapshot
    ShareClient snapshot = share.WithSnapshot(snapshotTime);

    // Get the root directory in the snapshot share
    ShareDirectoryClient rootDir = snapshot.GetRootDirectoryClient();

    // Recursively list the directory tree
    ListDirTree(rootDir);
}

//-------------------------------------------------
// Recursively list a directory tree
//-------------------------------------------------
public void ListDirTree(ShareDirectoryClient dir)
{
    // List the files and directories in the snapshot
    foreach (ShareFileItem item in dir.GetFilesAndDirectories())
    {
        if (item.IsDirectory)
        {
            Console.WriteLine($"Directory: {item.Name}");
            ShareDirectoryClient subDir = dir.GetSubdirectoryClient(item.Name);
            ListDirTree(subDir);
        }
        else
        {
            Console.WriteLine($"File: {dir.Name}\\{item.Name}");
        }
    }
}

Восстановление общих файловых ресурсов или файлов из моментальных снимков общего ресурсаRestore file shares or files from share snapshots

Создание моментального снимка общей папки позволяет восстанавливать отдельные файлы или всю общую папку.Taking a snapshot of a file share enables you to recover individual files or the entire file share.

Файл можно восстановить из моментального снимка, сделав запрос на моментальные снимки файлового ресурса.You can restore a file from a file share snapshot by querying the share snapshots of a file share. Затем можно получить файл, принадлежащий определенному моментальному снимку общего ресурса.You can then retrieve a file that belongs to a particular share snapshot. Используйте эту версию для непосредственного чтения или восстановления файла.Use that version to directly read or to restore the file.

//-------------------------------------------------
// Restore file from snapshot
//-------------------------------------------------
public async Task RestoreFileFromSnapshot(string shareName, string directoryName, string fileName, string snapshotTime)
{
    // Get the connection string from app settings
    string connectionString = ConfigurationManager.AppSettings["StorageConnectionString"];

    // Instatiate a ShareServiceClient
    ShareServiceClient shareService = new ShareServiceClient(connectionString);

    // Get a ShareClient
    ShareClient share = shareService.GetShareClient(shareName);

    // Get as ShareClient that points to a snapshot
    ShareClient snapshot = share.WithSnapshot(snapshotTime);

    // Get a ShareDirectoryClient, then a ShareFileClient to the snapshot file
    ShareDirectoryClient snapshotDir = snapshot.GetDirectoryClient(directoryName);
    ShareFileClient snapshotFile = snapshotDir.GetFileClient(fileName);

    // Get a ShareDirectoryClient, then a ShareFileClient to the live file
    ShareDirectoryClient liveDir = share.GetDirectoryClient(directoryName);
    ShareFileClient liveFile = liveDir.GetFileClient(fileName);

    // Restore the file from the snapshot
    ShareFileCopyInfo copyInfo = await liveFile.StartCopyAsync(snapshotFile.Uri);

    // Display the status of the operation
    Console.WriteLine($"Restore status: {copyInfo.CopyStatus}");
}

Удаление моментальных снимков общих ресурсовDelete share snapshots

В следующем примере удаляется моментальный снимок общего файлового ресурса.The following example deletes a file share snapshot.

//-------------------------------------------------
// Delete a snapshot
//-------------------------------------------------
public async Task DeleteSnapshotAsync(string shareName, string snapshotTime)
{
    // Get the connection string from app settings
    string connectionString = ConfigurationManager.AppSettings["StorageConnectionString"];

    // Instatiate a ShareServiceClient
    ShareServiceClient shareService = new ShareServiceClient(connectionString);

    // Get a ShareClient
    ShareClient share = shareService.GetShareClient(shareName);

    // Get a ShareClient that points to a snapshot
    ShareClient snapshotShare = share.WithSnapshot(snapshotTime);

    try
    {
        // Delete the snapshot
        await snapshotShare.DeleteIfExistsAsync();
    }
    catch (RequestFailedException ex)
    {
        Console.WriteLine($"Exception: {ex.Message}");
        Console.WriteLine($"Error code: {ex.Status}\t{ex.ErrorCode}");
    }
}

Устранение неполадок службы файлов Azure с помощью метрикTroubleshoot Azure Files by using metrics

Аналитика Службы хранилища Azure поддерживает метрики для службы файлов Azure.Azure Storage Analytics supports metrics for Azure Files. Данные метрик позволяют отслеживать запросы и диагностировать проблемы.With metrics data, you can trace requests and diagnose issues.

Вы можете включить метрики для службы файлов Azure из портал Azure.You can enable metrics for Azure Files from the Azure portal. Вы также можете включить метрики программно, вызвав операцию Set File Service Properties с REST API или одним из его аналогов в клиентской библиотеке файлов Azure.You can also enable metrics programmatically by calling the Set File Service Properties operation with the REST API or one of its analogs in the Azure Files client library.

В следующем примере кода показано, как использовать клиентскую библиотеку .NET для включения метрик для службы "файлы Azure".The following code example shows how to use the .NET client library to enable metrics for Azure Files.

//-------------------------------------------------
// Use metrics
//-------------------------------------------------
public async Task UseMetricsAsync()
{
    // Get the connection string from app settings
    string connectionString = ConfigurationManager.AppSettings["StorageConnectionString"];

    // Instatiate a ShareServiceClient
    ShareServiceClient shareService = new ShareServiceClient(connectionString);

    // Set metrics properties for File service
    await shareService.SetPropertiesAsync(new ShareServiceProperties()
    {
        // Set hour metrics
        HourMetrics = new ShareMetrics()
        {
            Enabled = true,
            IncludeApis = true,
            Version = "1.0",

            RetentionPolicy = new ShareRetentionPolicy()
            {
                Enabled = true,
                Days = 14
            }
        },

        // Set minute metrics
        MinuteMetrics = new ShareMetrics()
        {
            Enabled = true,
            IncludeApis = true,
            Version = "1.0",

            RetentionPolicy = new ShareRetentionPolicy()
            {
                Enabled = true,
                Days = 7
            }
        }
    });

    // Read the metrics properties we just set
    ShareServiceProperties serviceProperties = await shareService.GetPropertiesAsync();

    // Display the properties
    Console.WriteLine();
    Console.WriteLine($"HourMetrics.InludeApis: {serviceProperties.HourMetrics.IncludeApis}");
    Console.WriteLine($"HourMetrics.RetentionPolicy.Days: {serviceProperties.HourMetrics.RetentionPolicy.Days}");
    Console.WriteLine($"HourMetrics.Version: {serviceProperties.HourMetrics.Version}");
    Console.WriteLine();
    Console.WriteLine($"MinuteMetrics.InludeApis: {serviceProperties.MinuteMetrics.IncludeApis}");
    Console.WriteLine($"MinuteMetrics.RetentionPolicy.Days: {serviceProperties.MinuteMetrics.RetentionPolicy.Days}");
    Console.WriteLine($"MinuteMetrics.Version: {serviceProperties.MinuteMetrics.Version}");
    Console.WriteLine();
}

Если возникнут проблемы, см. статью Устранение неполадок с файлами Azure в Windows.If you encounter any problems, you can refer to Troubleshoot Azure Files problems in Windows.

Дальнейшие действияNext steps

Дополнительные сведения о службе файлов Azure см. в следующих ресурсах:For more information about Azure Files, see the following resources:

Тематические статьи и видеоConceptual articles and videos

Средства для работы с хранилищем файловTooling support for File storage

СправочникReference