.NET 用 Azure Storage ファイル共有クライアント ライブラリ - バージョン 12.17.0
サーバー バージョン: 2021-02-12、2020-12-06、2020-10-02、 2020-08-04、2020-06-12、2020-04-08、2020-02-10、2019-12-12、2019-07-07、および 2019-02-02
Azure ファイル共有は、業界標準のサーバー メッセージ ブロック (SMB) プロトコルを介してアクセスできるフル マネージド ファイル共有をクラウドで提供します。 Azure ファイル共有は、クラウドまたはオンプレミスにある Windows、macOS、および Linux に同時にマウントできます。 さらに、高速アクセスするため、Azure File Sync を使用して、データが使用されている場所の近くの Windows サーバーに Azure ファイル共有をキャッシュできます。
ソースコード | パッケージ (NuGet) | API リファレンス ドキュメント | REST API のドキュメント | 製品ドキュメント
作業の開始
パッケージをインストールする
NuGet を使用して .NET 用の Azure Storage ファイル共有クライアント ライブラリをインストールします。
dotnet add package Azure.Storage.Files.Shares
前提条件
このパッケージを使用するには、 Azure サブスクリプション と ストレージ アカウント が必要です。
新しいストレージ アカウントを作成するには、Azure Portal、Azure PowerShell、または Azure CLI を使用できます。 Azure CLI を使う例を次に示します。
az storage account create --name MyStorageAccount --resource-group MyResourceGroup --location westus --sku Standard_LRS
主要な概念
Azure ファイル共有は、以下の作業に使用できます。
- 従来のオンプレミスのファイル サーバーまたは NAS デバイスを完全に置き換えるか、補完します。
- ファイル共有がファイル アプリケーションまたはユーザー データを格納することを想定するクラウドにアプリケーションを "リフト アンド シフト" します。
- 共有アプリケーション設定、診断共有、Dev/Test/Debug ツール ファイル共有を使用して、新しいクラウド開発プロジェクトを簡略化します。
スレッド セーフ
すべてのクライアント インスタンス メソッドがスレッド セーフであり、相互に独立していることを保証します (ガイドライン)。 これにより、クライアント インスタンスの再利用に関する推奨事項は、スレッド間でも常に安全になります。
その他の概念
クライアント オプション | 応答 | へのアクセス実行時間の長い操作 | エラーの | 処理診断 | あざける | クライアントの有効期間
例
共有を作成してファイルをアップロードする
// Get a connection string to our Azure Storage account. You can
// obtain your connection string from the Azure Portal (click
// Access Keys under Settings in the Portal Storage account blade)
// or using the Azure CLI with:
//
// az storage account show-connection-string --name <account_name> --resource-group <resource_group>
//
// And you can provide the connection string to your application
// using an environment variable.
string connectionString = "<connection_string>";
// Name of the share, directory, and file we'll create
string shareName = "sample-share";
string dirName = "sample-dir";
string fileName = "sample-file";
// Path to the local file to upload
string localFilePath = @"<path_to_local_file>";
// Get a reference to a share and then create it
ShareClient share = new ShareClient(connectionString, shareName);
share.Create();
// Get a reference to a directory and create it
ShareDirectoryClient directory = share.GetDirectoryClient(dirName);
directory.Create();
// Get a reference to a file and upload it
ShareFileClient file = directory.GetFileClient(fileName);
using (FileStream stream = File.OpenRead(localFilePath))
{
file.Create(stream.Length);
file.UploadRange(
new HttpRange(0, stream.Length),
stream);
}
ファイルをダウンロードする
string connectionString = "<connection_string>";
// Name of the share, directory, and file we'll download from
string shareName = "sample-share";
string dirName = "sample-dir";
string fileName = "sample-file";
// Path to the save the downloaded file
string localFilePath = @"<path_to_local_file>";
// Get a reference to the file
ShareClient share = new ShareClient(connectionString, shareName);
ShareDirectoryClient directory = share.GetDirectoryClient(dirName);
ShareFileClient file = directory.GetFileClient(fileName);
// Download the file
ShareFileDownloadInfo download = file.Download();
using (FileStream stream = File.OpenWrite(localFilePath))
{
download.Content.CopyTo(stream);
}
共有を走査する
// Connect to the share
string connectionString = "<connection_string>";
string shareName = "sample-share";
ShareClient share = new ShareClient(connectionString, shareName);
// Track the remaining directories to walk, starting from the root
var remaining = new Queue<ShareDirectoryClient>();
remaining.Enqueue(share.GetRootDirectoryClient());
while (remaining.Count > 0)
{
// Get all of the next directory's files and subdirectories
ShareDirectoryClient dir = remaining.Dequeue();
foreach (ShareFileItem item in dir.GetFilesAndDirectories())
{
// Print the name of the item
Console.WriteLine(item.Name);
// Keep walking down directories
if (item.IsDirectory)
{
remaining.Enqueue(dir.GetSubdirectoryClient(item.Name));
}
}
}
非同期 API
同期 API と非同期 API の両方が完全にサポートされています。
string connectionString = "<connection_string>";
// Name of the share, directory, and file we'll download from
string shareName = "sample-share";
string dirName = "sample-dir";
string fileName = "sample-file";
// Path to the save the downloaded file
string localFilePath = @"<path_to_local_file>";
// Get a reference to the file
ShareClient share = new ShareClient(connectionString, shareName);
ShareDirectoryClient directory = share.GetDirectoryClient(dirName);
ShareFileClient file = directory.GetFileClient(fileName);
// Download the file
ShareFileDownloadInfo download = await file.DownloadAsync();
using (FileStream stream = File.OpenWrite(localFilePath))
{
await download.Content.CopyToAsync(stream);
}
トラブルシューティング
すべての Azure Storage ファイル共有サービス操作では、障害発生時に RequestFailedException がスローされ、役に立ちますErrorCode
。 これらのエラーの多くは回復可能です。
// Connect to the existing share
string connectionString = "<connection_string>";
string shareName = "sample-share";
ShareClient share = new ShareClient(connectionString, shareName);
try
{
// Try to create the share again
share.Create();
}
catch (RequestFailedException ex)
when (ex.ErrorCode == ShareErrorCode.ShareAlreadyExists)
{
// Ignore any errors if the share already exists
}
次のステップ
ファイル サンプルの概要:
- Hello World: ファイルのアップロード、ファイルのダウンロード、共有の走査 (または非同期)
- 認証: 接続文字列、共有キー、および共有アクセス署名を使用して認証します。
共同作成
このライブラリのビルド、テスト、および投稿の詳細については、「 Storage CONTRIBUTING.md 」を参照してください。
このプロジェクトでは、共同作成と提案を歓迎しています。 ほとんどの共同作成では、共同作成者使用許諾契約書 (CLA) にご同意いただき、ご自身の共同作成内容を使用する権利を Microsoft に供与する権利をお持ちであり、かつ実際に供与することを宣言していただく必要があります。 詳細については、「 cla.microsoft.com」を参照してください。
このプロジェクトでは、Microsoft オープン ソースの倫理規定を採用しています。 詳しくは、「Code of Conduct FAQ (倫理規定についてよくある質問)」を参照するか、opencode@microsoft.com 宛てに質問またはコメントをお送りください。