Aracılığıyla paylaş


.NET ile Azure Dosyaları için geliştirme

Verileri depolamak için Azure Dosyalar kullanan .NET uygulamaları geliştirmeyi öğrenin. Azure Dosyalar, bulutta yönetilen bir dosya paylaşımı hizmetidir. Endüstri standardı Sunucu İleti Bloğu (SMB) ve Ağ Dosya Sistemi (NFS) protokolleri aracılığıyla erişilebilen tam olarak yönetilen dosya paylaşımları sağlar. Azure Dosyalar ayrıca dosya paylaşımlarına program aracılığıyla erişim için bir REST API sağlar.

Bu makalede, .NET'te Azure Dosyaları ile geliştirmenin farklı yaklaşımları ve uygulamanızın gereksinimlerine en uygun yaklaşımı seçmeyi öğreneceksiniz. Ayrıca Azure Dosyalar kaynaklarıyla etkileşim kuran temel bir konsol uygulaması oluşturmayı da öğrenirsiniz.

Şunlara uygulanır

Yönetim modeli Faturalama modeli Medya katmanı Yedeklilik Küçük ve Orta Büyüklükteki İşletme (SMB) Ağ Dosya Sistemi (NFS)
Microsoft.Storage Sağlanan versiyon 2 HDD (standart) Yerel (LRS) Evet Hayır
Microsoft.Storage Sağlanan versiyon 2 HDD (standart) Bölge (ZRS) Evet Hayır
Microsoft.Storage Sağlanan versiyon 2 HDD (standart) Coğrafi (GRS) Evet Hayır
Microsoft.Storage Sağlanan versiyon 2 HDD (standart) GeoZone (GZRS) Evet Hayır
Microsoft.Storage Tahsis edilen v1 SSD (üst düzey) Yerel (LRS) Evet Hayır
Microsoft.Storage Tahsis edilen v1 SSD (üst düzey) Bölge (ZRS) Evet Hayır
Microsoft.Storage Kullandıkça ödeme yap HDD (standart) Yerel (LRS) Evet Hayır
Microsoft.Storage Kullandıkça ödeme yap HDD (standart) Bölge (ZRS) Evet Hayır
Microsoft.Storage Kullandıkça ödeme yap HDD (standart) Coğrafi (GRS) Evet Hayır
Microsoft.Storage Kullandıkça ödeme yap HDD (standart) GeoZone (GZRS) Evet Hayır

Azure Dosyalar ile .NET uygulama geliştirme hakkında

Azure Dosyalar, .NET geliştiricilerinin Azure Dosyalar'daki verilere erişmesi ve kaynakları yönetmesi için çeşitli yollar sunar. Aşağıdaki tabloda yaklaşımlar listelenir, nasıl çalıştıkları özetler ve her yaklaşımın ne zaman kullanılacağına ilişkin yönergeler sağlanır:

Yaklaşım Nasıl çalışır? ne zaman kullanılmalı
Standart dosya giriş/çıkış kitaplıkları SMB veya NFS kullanarak bağlanmış Azure dosya paylaşımları üzerinden işletim sistemi seviyesindeki API çağrılarını kullanır. SMB/NFS kullanarak bir dosya paylaşımı bağladığınızda, .NET gibi System.IO bir programlama dili veya çerçevesi için dosya G/Ç kitaplıklarını kullanabilirsiniz. Standart dosya G/Ç kullanan mevcut koda sahip iş kolu uygulamalarınız var ve uygulamanın bir Azure dosya paylaşımıyla çalışması için kodu yeniden yazmak istemiyorsunuz.
FileREST API Azure Dosyalar'da depolanan verilerle etkileşime geçmek için HTTPS uç noktalarını doğrudan çağırır. Dosya paylaşımı kaynakları üzerinde programlı denetim sağlar. Azure SDK, FileREST API'sini temel alan Dosya Paylaşımları istemci kitaplığını (Azure.Storage.Files.Shares) sağlayarak tanıdık .NET programlama dili paradigmalarıyla FileREST API işlemleriyle etkileşim kurmanızı sağlar. Müşteriler için katma değerli bulut hizmetleri ve uygulamaları oluşturuyorsunuz ve aracılığıyla System.IOkullanılamayan gelişmiş özellikleri kullanmak istiyorsunuz.
Depolama kaynak sağlayıcısı REST API'si Depolama hesaplarını ve dosya paylaşımlarını yönetmek için Azure Resource Manager'ı (ARM) kullanır. Çeşitli kaynak yönetimi işlemleri için REST API uç noktalarını çağırır. Uygulamanızın veya hizmetinizin depolama hesaplarını veya dosya paylaşımlarını oluşturma, silme veya güncelleştirme gibi kaynak yönetimi görevlerini gerçekleştirmesi gerekir.

Bu yaklaşımlar hakkında genel bilgi için bkz. Azure Dosyalar ile uygulama geliştirmeye genel bakış.

Bu makale, aşağıdaki yaklaşımları kullanarak Azure Dosyalar kaynaklarıyla çalışmaya odaklanır:

Önkoşullar

Ortamınızı ayarlama

Bu bölümde, .NET konsol uygulamasını Azure Dosyalar ile çalışacak şekilde hazırlama adımları adım adım gösterilir.

Projeyi oluşturma

Henüz bir .NET uygulamanız yoksa Visual Studio veya .NET CLI kullanarak bir uygulama oluşturun. Bu makalede basitlik için bir konsol uygulaması oluşturacağız.

  1. Visual Studio'yu başlatın ve Yeni proje oluştur'u seçin. Veya Visual Studio'daysanız Dosya>Yeni>Proje'ye gidin.
  2. İletişim kutusunda C# için Konsol Uygulaması'nı ve ardından İleri'yi seçin.
  3. Proje için bir ad girin, varsayılan değerleri değiştirmeyin ve İleri'yi seçin.
  4. Framework için .NET'in en son yüklü sürümünü seçin. Diğer varsayılan değerleri değiştirmeyin ve Oluştur'u seçin.

paketini yükleyin

Ad alanını kullanarak System.IO Azure Dosyalar ile etkileşim kurmayı planlıyorsanız ek paket yüklemeniz gerekmez. Ad System.IO alanı .NET SDK'sı ile birlikte sunulur. .NET için Dosya Paylaşımları istemci kitaplığını veya .NET için Azure Depolama yönetim kitaplığını kullanmayı planlıyorsanız NuGet kullanarak paketi yükleyin.

  1. Çözüm Gezgini'da projenize sağ tıklayın ve NuGet Paketlerini Yönet'i seçin.

  2. NuGet Paket Yöneticisi'nde Gözat'ı seçin. Ardından uygun paketi arayıp seçin ve Yükle'yi seçin. Dosya Paylaşımları istemci kitaplığı için Azure.Storage.Files.Shares'ı seçin. Azure Depolama yönetim kitaplığı için Azure.ResourceManager.Storage'ı seçin. Parolasız bağlantılar için gereken Azure Kimlik kitaplığı için Azure.Identity'yi seçin.

    Bu adım paketi ve bağımlılıklarını yükler.

Using yönergeleri ekle

Ad alanını System.IO kullanmayı planlıyorsanız, Program.cs dosyanızın en üstüne aşağıdaki using yönergesini ekleyin:

using System.IO;

.NET için Dosya Paylaşımları istemci kitaplığını kullanmayı planlıyorsanız, Program.cs dosyanızın en üstüne aşağıdaki using yönergesini ekleyin:

using Azure.Storage.Files.Shares;

.NET için Azure Depolama yönetim kitaplığını kullanmayı planlıyorsanız, Program.cs dosyanızın en üstüne aşağıdaki using yönergesini ekleyin:

using Azure.ResourceManager;

Azure hizmetlerine parolasız bağlantılar için Azure Kimlik kitaplığını kullanmak için Program.cs dosyanızın en üstüne aşağıdaki using yönergesini ekleyin:

using Azure.Identity;

System.IO kullanarak Azure Dosyalar ile çalışma

Standart dosya G/Ç kitaplıkları, Azure Dosyalar kaynaklarına erişmenin ve bu kaynaklarla çalışmanın en yaygın yoludur. SMB veya NFS kullanarak bir dosya paylaşımı bağladığınızda, işletim sisteminiz yerel dosya sistemi için API isteklerini yeniden yönlendirir. Bu yaklaşım, paylaşımdaki dosya ve dizinlerle etkileşime geçmek için gibi System.IOstandart dosya G/Ç kitaplıklarını kullanmanıza olanak tanır.

"System.IO kullanmayı, uygulamanız şunları gerektirdiğinde göz önünde bulundurun:"

  • Uygulama uyumluluğu:System.IO'i zaten kullanan mevcut koda sahip iş kolu uygulamaları için idealdir. Uygulamanın bir Azure dosya paylaşımıyla çalışması için kodu yeniden yazmanız gerekmez.
  • Kullanım kolaylığı:System.IO geliştiriciler tarafından iyi bilinir ve kullanımı kolaydır. Azure Dosyalar'ın önemli bir değer teklifi, yerel dosya sistemi API'lerini SMB ve NFS aracılığıyla kullanıma sunmasıdır.

Bu bölümde, System.IO kullanarak Azure Dosyaları kaynaklarıyla çalışmayı öğreneceksiniz.

Daha fazla bilgi ve örnek için aşağıdaki kaynaklara bakın:

Dosya paylaşımını bağlamak

System.IO kullanmak için önce bir dosya paylaşımı bağlamanız gerekir. SMB veya NFS kullanarak dosya paylaşımını bağlama yönergeleri için aşağıdaki kaynaklara bakın:

Bu makalede, Windows'ta bağlı bir SMB dosya paylaşımına başvurmak için aşağıdaki yolu kullanacağız:

string fileSharePath = @"Z:\file-share";

Örnek: System.IO kullanarak dosya paylaşımına bağlanma ve dizinleri listeleme

Aşağıdaki kod örneği, bir dosya paylaşımına bağlanmayı ve paylaşımdaki dizinleri listelemeyi gösterir:

using System.IO;

string fileSharePath = @"Z:\file-share";

EnumerateDirectories(@"Z:\file-share");

static void EnumerateDirectories(string path)
{
    try
    {
        List<string> dirs = new List<string>(Directory.EnumerateDirectories(path));

        foreach (var dir in dirs)
        {
            Console.WriteLine($"{dir.Substring(dir.LastIndexOf(Path.DirectorySeparatorChar) + 1)}");
        }
        Console.WriteLine($"{dirs.Count} directories found.");
    }
    catch (UnauthorizedAccessException ex)
    {
        Console.WriteLine(ex.Message);
    }
    catch (PathTooLongException ex)
    {
        Console.WriteLine(ex.Message);
    }
}

Örnek: System.IO kullanarak dosya paylaşımındaki bir dosyaya yazma

Aşağıdaki kod örneğinde, sınıfıyla metin yazma ve ekleme işlemi gösterilmektedir File :

using System.IO;

string fileSharePath = @"Z:\file-share";

WriteToFile(fileSharePath, "test.txt");

static void WriteToFile(string fileSharePath, string fileName)
{
    string textToWrite = "First line" + Environment.NewLine;
    string filePath = Path.Combine(fileSharePath, fileName);
    
    File.WriteAllText(filePath, textToWrite);

    string[] textToAppend = { "Second line", "Third line" };
    File.AppendAllLines(filePath, textToAppend);
}

Örnek: System.IO kullanarak dosya paylaşımındaki bir dosyayı kilitleme

Dosya paylaşımlarını bağlayan SMB istemcileri, paylaşılan dosyalara erişimi yönetmek için dosya sistemi kilitleme mekanizmalarını kullanabilir.

Aşağıdaki kod örneğinde, paylaşım modu olarak ayarlanmış bir dosya paylaşımındaki bir dosyanın nasıl kilitlanacağı gösterilmektedir None. Bu paylaşım modu, dosya kapatılana kadar geçerli dosyanın paylaşımını reddeder.

using System.IO;

string fileSharePath = @"Z:\file-share";

LockFile(Path.Combine(fileSharePath, "test.txt"));

static void LockFile(string filePath)
{
    try
    {
        using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.ReadWrite, FileShare.None))
        {
            Console.WriteLine("File locked.");

            // Do something with file, press Enter to close the stream and release the lock
            Console.ReadLine();

            fs.Close();
            Console.WriteLine("File closed.");
        }
    }
    catch (IOException ex)
    {
        Console.WriteLine(ex.Message);
    }
}

Hem SMB hem de FileREST API'sini kullanırken, FileREST API kiralamalarının dosya kilitlerini yönetmek için kullanıldığını, SMB'nin ise işletim sistemi tarafından yönetilen dosya sistemi kilitlerini kullandığını unutmayın. SMB ile FileREST API arasındaki dosya kilitleme etkileşimlerini yönetme hakkında daha fazla bilgi edinmek için bkz. Dosya kilitlerini yönetme.

Örnek: System.IO kullanarak dosya ACL'lerini listeleme

Aşağıdaki kod örneğinde, bir dosya için erişim denetim listelerinin (ACL) nasıl numaralandırılası gösterilmektedir:

using System.IO;
using System.Security.AccessControl;

string fileSharePath = @"Z:\file-share";
string fileName = "test.txt";
string filePath = Path.Combine(fileSharePath, fileName);

EnumerateFileACLs(filePath);

static void EnumerateFileACLs(string filePath)
{
    FileInfo fileInfo = new FileInfo(filePath);

    // For directories, use DirectorySecurity instead of FileSecurity
    FileSecurity fSecurity = FileSystemAclExtensions.GetAccessControl(fileInfo);

    // List all access rules for the file
    foreach (FileSystemAccessRule rule in fSecurity.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount)))
    {
        Console.WriteLine($"Identity: {rule.IdentityReference.Value}");
        Console.WriteLine($"Access Control Type: {rule.AccessControlType}");
        Console.WriteLine($"File System Rights: {rule.FileSystemRights}");
        Console.WriteLine();
    }

}

.NET için Dosya Paylaşımları istemci kitaplığını kullanarak Azure Dosyalar verileriyle çalışma

FileREST API'sinde Azure Dosyalar'a program aracılığıyla erişim sağlanır. Dosya paylaşımları, dizinler ve dosyalar üzerinde işlem gerçekleştirmek için HTTPS uç noktalarını çağırmanıza olanak tanır. FileREST API'si, yerel protokoller aracılığıyla kullanılamayabilecek yüksek ölçeklenebilirlik ve gelişmiş özellikler için tasarlanmıştır. Azure SDK, FileREST API'si üzerine inşa eden .NET için Dosya Paylaşımları istemci kitaplığı gibi istemci kütüphaneleri sağlar.

Uygulamanız şunları gerektiriyorsa FileREST API'sini ve Dosya Paylaşımı istemci kitaplığını kullanmayı göz önünde bulundurun:

  • Gelişmiş özellikler: Yerel protokoller aracılığıyla kullanılamayabilecek işlemlere ve özelliklere erişin.
  • Özel bulut tümleştirmeleri: Doğrudan Azure Dosyaları ile etkileşim kuran yedekleme, virüsten koruma veya veri yönetimi gibi özel katma değerli hizmetler oluşturun.
  • Performans iyileştirmesi: Veri düzlemi işlemlerini kullanarak yüksek ölçekli senaryolarda performans avantajlarından yararlanın.

FileREST API'sinde Azure Dosyalar kaynak hiyerarşisi olarak modellenir ve dizin veya dosya düzeyinde gerçekleştirilen işlemler için önerilir. Dosya hizmeti veya dosyapaylaşımı düzeyinde gerçekleştirilen işlemler için Depolama kaynak sağlayıcısı REST API'sini tercih etmelisiniz.

Bu bölümde, Azure Dosyaları kaynaklarıyla çalışmak için Dosya Paylaşımı istemci kütüphanesini nasıl kullanacağınızı öğrenirsiniz.

Daha fazla bilgi ve örnek için aşağıdaki kaynaklara bakın:

Erişimi yetkilendirme ve istemci oluşturma

Bir uygulamayı Azure Dosyalar'a bağlamak için bir ShareClient nesne oluşturun. Bu nesne, Azure Dosyalar kaynaklarıyla çalışmak için başlangıç noktanızdır. Aşağıdaki kod örnekleri, farklı yetkilendirme mekanizmaları kullanarak bir ShareClient nesnenin nasıl oluşturulacağını gösterir.

Microsoft Entra ID ile yetkilendirmek için bir güvenlik ilkesi kullanmanız gerekir. İhtiyacınız olan güvenlik sorumlusunun türü, uygulamanızın nerede çalıştığına bağlıdır. Bu tabloyu kılavuz olarak kullanın.

Uygulamanın çalıştığı yer Güvenlik sorumlusu Yönerge
Yerel makine (geliştirme ve test) Servis Principal Uygulamayı kaydetmeyi, bir Microsoft Entra grubu ayarlamayı, rolleri atamayı ve ortam değişkenlerini yapılandırmayı öğrenmek için bkz . Geliştirici hizmet sorumlularını kullanarak erişimi yetkilendirme
Yerel makine (geliştirme ve test) Kullanıcı kimliği Microsoft Entra grubu ayarlamayı, rol atamayı ve Azure'da oturum açmayı öğrenmek için bkz . Geliştirici kimlik bilgilerini kullanarak erişimi yetkilendirme
Azure'da barındırılan Denetim Altındaki Kimlik Azure'da barındırılan uygulamalardan yönetilen kimlik kullanarak erişimi yetkilendirme hakkında bilgi almak için Yönetilen kimlik etkinleştirme ve rolleri atama< /c0> konusuna bakın.
Azure dışında barındırılan (örneğin, şirket içi uygulamalar) Servis Principal Uygulamayı kaydetmeyi, rolleri atamayı ve ortam değişkenlerini yapılandırmayı öğrenmek için bkz . Uygulama hizmet sorumlusu kullanarak şirket içi uygulamalardan erişimi yetkilendirme

Bu makaledeki kod örnekleriyle çalışmak için Azure RBAC yerleşik rolünü Depolama Dosyası Verileri Ayrıcalıklı Katkıda Bulunanı güvenlik sorumlusuna atayın. Bu rol, ayarlanan dosya/dizin düzeyi NTFS izinlerinden bağımsız olarak tüm yapılandırılmış depolama hesapları için paylaşımlardaki tüm verilere tam okuma, yazma, değiştirme ve silme erişimi sağlar. Daha fazla bilgi için bkz. REST üzerinden Azure Dosyalar OAuth ile Microsoft Entra ID kullanarak Azure dosya paylaşımlarını erişme.

DefaultAzureCredential kullanarak erişimi yetkilendirme

Erişimi yetkilendirmenin ve Azure Dosyalar'a bağlanmanın kolay ve güvenli bir yolu , DefaultAzureCredential örneği oluşturarak OAuth belirteci almaktır. Ardından bu kimlik bilgilerini kullanarak bir ShareClient nesne oluşturabilirsiniz.

Aşağıdaki örnek, kullanılarak ShareClientyetkilendirilmiş bir DefaultAzureCredential nesne oluşturur ve ardından paylaşımdaki bir ShareDirectoryClient dizinle çalışmak için bir nesne oluşturur:

using Azure.Identity;
using Azure.Storage.Files.Shares;
using Azure.Storage.Files.Shares.Models;

// ...

string accountName = "<account-name>";
string shareName = "<share-name>";

ShareClientOptions options = new()
{
    AllowSourceTrailingDot = true,
    AllowTrailingDot = true,
    ShareTokenIntent = ShareTokenIntent.Backup,
};
ShareClient shareClient = new(
   new Uri($"https://{accountName}.file.core.windows.net/{shareName}"),
   new DefaultAzureCredential(),
   options);

ShareDirectoryClient directoryClient = shareClient.GetDirectoryClient("sample-directory");

Kullanıcıların kimliğini doğrulamak için tam olarak hangi kimlik bilgisi türünü kullandığınızı biliyorsanız, .NET için Azure Identity istemci kitaplığındaki diğer sınıfları kullanarak bir OAuth belirteci alabilirsiniz. Bu sınıflar TokenCredential sınıfından türetilir.

Bu yetkilendirme mekanizmalarının her biri hakkında daha fazla bilgi edinmek için bkz. Dosya verilerine erişimi yetkilendirmeyi seçme.

Örnek: Dosya Paylaşımları istemci kitaplığını kullanarak dosyaları kopyalama

Aşağıdaki yöntemi kullanarak dosyaları bir dosya paylaşımı içinde veya dosya paylaşımları arasında kopyalayabilirsiniz:

Bir nesneden BlobClient aşağıdaki yöntemi kullanarak bir dosyayı hedef bloba kopyalayabilirsiniz:

Aşağıdaki kod örneği, bir dosyanın başka bir dosya paylaşımındaki bir dosyaya nasıl kopyalanmasını gösterir:

using Azure.Core;
using Azure.Identity;
using Azure.Storage.Files.Shares;
using Azure.Storage.Files.Shares.Models;

string accountName = "<account-name>";
string srcShareName = "src-file-share";
string destShareName = "dest-file-share";
string srcFilePath = "src/path/to/file";
string destFilePath = "dest/path/to/file";

TokenCredential tokenCredential = new DefaultAzureCredential();

ShareClientOptions options = new()
{
    ShareTokenIntent = ShareTokenIntent.Backup,
};

ShareFileClient srcShareFileClient = new(
    new Uri($"https://{accountName}.file.core.windows.net/{srcShareName}/{srcFilePath}"),
    tokenCredential,
    options);

ShareFileClient destShareFileClient = new(
    new Uri($"https://{accountName}.file.core.windows.net/{destShareName}/{destFilePath}"),
    tokenCredential,
    options);

// Copy the file from the source share to the destination share

await destShareFileClient.StartCopyAsync(srcShareFileClient.Uri);

Örnek: Dosya Paylaşımları istemci kitaplığını kullanarak dosya kiralama

Kira, Azure tarafından kira kimliği aracılığıyla yönetilen bir dosyada kilit oluşturur. Kira, dağıtılmış bir sistemdeki birden çok istemcideki dosyalara erişimi koordine etmek için bir mekanizma sağlar. Bir dosya üzerindeki kiralama, özel yazma ve silme erişimi sağlar. Kira durumları ve eylemleri hakkında daha fazla bilgi edinmek için bkz. Kira Dosyası.

Aşağıdaki kod örneğinde kira istemcisi oluşturma, dosyada sonsuz süreli kiralama alma ve kirayı serbest bırakma işlemi gösterilmektedir:

using Azure.Core;
using Azure.Identity;
using Azure.Storage.Files.Shares;
using Azure.Storage.Files.Shares.Models;
using Azure.Storage.Files.Shares.Specialized;

string accountName = "<account-name>";
string shareName = "sample-file-share";
string filePath = "path/to/file";

TokenCredential tokenCredential = new DefaultAzureCredential();

ShareClientOptions options = new()
{
    ShareTokenIntent = ShareTokenIntent.Backup,
};

ShareFileClient fileClient = new(
    new Uri($"https://{accountName}.file.core.windows.net/{shareName}/{filePath}"),
    tokenCredential,
    options);

ShareLeaseClient leaseClient = fileClient.GetShareLeaseClient();

// Acquire a lease on the source file
await leaseClient.AcquireAsync(duration: ShareLeaseClient.InfiniteLeaseDuration);

// Do something with the file

// Release the lease
await leaseClient.ReleaseAsync();

Hem SMB hem de FileREST API'sini kullanırken, FileREST API kiralamalarının dosya kilitlerini yönetmek için kullanıldığını, SMB'nin ise işletim sistemi tarafından yönetilen dosya sistemi kilitlerini kullandığını unutmayın. SMB ile FileREST API arasındaki dosya kilitleme etkileşimlerini yönetme hakkında daha fazla bilgi edinmek için bkz. Dosya kilitlerini yönetme.

Örnek: Dosya Paylaşımları istemci kitaplığını kullanarak paylaşım anlık görüntülerini oluşturma ve listeleme

Paylaşım anı görüntüleri, bir dosya paylaşımının belirli bir noktadaki salt okunur kopyalarıdır. Bir dosya paylaşımının anlık görüntüsünü oluşturabilir ve ardından anlık görüntünün oluşturulduğu sırada paylaşımdaki verilere erişmek için anlık görüntüyü kullanabilirsiniz. Ayrıca bir dosya paylaşımındaki tüm anlık görüntüleri listeleyebilir ve paylaşım anlık görüntülerini silebilirsiniz.

Aşağıdaki kod örneğinde paylaşım anlık görüntüsü oluşturma, dosya paylaşımındaki anlık görüntüleri listeleme ve paylaşım anlık görüntüsünde dizin ağacında dolaşma işlemleri gösterilmektedir:

using Azure.Storage.Files.Shares;
using Azure.Storage.Files.Shares.Models;

string connectionString = "<connection-string>";

ShareServiceClient shareServiceClient = new ShareServiceClient(connectionString);
ShareClient shareClient = shareServiceClient.GetShareClient("sample-file-share");

// Create a snapshot

ShareSnapshotInfo snapshotInfo = await shareClient.CreateSnapshotAsync();
Console.WriteLine($"Snapshot created: {snapshotInfo.Snapshot}");

// List snapshots in a share

await foreach (ShareItem shareItem in shareServiceClient.GetSharesAsync(ShareTraits.All, ShareStates.Snapshots))
{
    if (shareItem.Snapshot != null)
    {
        Console.WriteLine($"Share: {shareItem.Name} (Snapshot: {shareItem.Snapshot})");
    }
}

// List directories and files in a share snapshot

string snapshotTimestamp = snapshotInfo.Snapshot.ToString();
ShareClient shareSnapshot = shareClient.WithSnapshot(snapshotTimestamp);
ShareDirectoryClient rootDir = shareSnapshot.GetRootDirectoryClient();

await ListDirectoryTreeAsync(rootDir);

static async Task ListDirectoryTreeAsync(ShareDirectoryClient directory)
{
    await foreach (ShareFileItem fileItem in directory.GetFilesAndDirectoriesAsync())
    {
        if (fileItem.IsDirectory)
        {
            Console.WriteLine($"Directory: {fileItem.Name}");
            await ListDirectoryTreeAsync(directory.GetSubdirectoryClient(fileItem.Name));
        }
        else
        {
            Console.WriteLine($"File: {fileItem.Name}");
        }
    }
}

Uyarı

OAuth belirteçleri, örneğin DefaultAzureCredential kullanılırken elde edilenler gibi, dosya paylaşımı düzeyinde veri düzlemi işlemleri için izin verilmez. Paylaşım anlık görüntüleriyle çalışmak için istemci nesnesinin hesap anahtarı kullanılarak yetkilendirilmiş olması gerekir. ShareClient Bu kod örneğinde oluşturulan nesne, hesap anahtarını içeren bir bağlantı dizesi kullanır.

Hesap anahtarlarının veya bağlantı dizelerinin depolanması bir güvenlik riski oluşturur. Bunları yalnızca Microsoft Entra kimlik doğrulaması kullanılamadığında kullanmalısınız. Hesap anahtarlarını Azure Key Vault'ta güvenli bir şekilde depolama hakkında daha fazla bilgi edinmek için bkz. Azure Key Vault yönetilen depolama hesabı anahtarları hakkında.

Azure Depolama yönetim kitaplıklarını kullanarak Azure Dosyalar kaynaklarını yönetme

Azure Depolama yönetim kitaplıkları, Azure Depolama kaynak sağlayıcısı REST API'sinde oluşturulur. Azure Depolama kaynak sağlayıcısı, Azure Resource Manager'ı temel alan bir hizmettir ve hem bildirim temelli (şablonlar) hem de kesinlik temelli (doğrudan API çağrısı) yöntemlerini destekler. Azure Depolama kaynak sağlayıcısı REST API'si, dosya paylaşımları dahil olmak üzere Azure Depolama kaynaklarına programlı erişim sağlar. Azure SDK, Azure Depolama kaynak sağlayıcısı REST API'sini oluşturan yönetim kitaplıkları sağlar.

Yönetim kitaplıkları , dosya hizmeti veya dosya paylaşımı düzeyinde gerçekleştirilen işlemler için önerilir. Bu bölümde, Azure Dosyalar kaynaklarını yönetmek için Azure Depolama yönetim kitaplıklarını kullanmayı öğreneceksiniz.

Örnek: Azure Depolama yönetim kitaplığını kullanarak dosya paylaşımı oluşturma

Aşağıdaki kod örneğinde en üst düzey ArmClient nesne oluşturma, Depolama kaynak sağlayıcısını bir aboneliğe kaydetme ve Azure Depolama yönetim kitaplığını kullanarak dosya paylaşımı oluşturma işlemleri gösterilmektedir:

using Azure;
using Azure.Core;
using Azure.Identity;
using Azure.ResourceManager;
using Azure.ResourceManager.Resources;
using Azure.ResourceManager.Storage;

ArmClient armClient = new ArmClient(new DefaultAzureCredential());

// Create a resource identifier, then get the subscription resource
ResourceIdentifier resourceIdentifier = new($"/subscriptions/<subscription-id>");
SubscriptionResource subscription = armClient.GetSubscriptionResource(resourceIdentifier);

ResourceProviderResource resourceProvider =
    await subscription.GetResourceProviderAsync("Microsoft.Storage");

// Check the registration state of the resource provider and register, if needed
if (resourceProvider.Data.RegistrationState == "NotRegistered")
    resourceProvider.Register();

// Get a resource group
ResourceGroupResource resourceGroup = await subscription.GetResourceGroupAsync("<resource-group-name>");

// Get a collection of storage account resources
StorageAccountCollection accountCollection = resourceGroup.GetStorageAccounts();

// Get a specific storage account resource
StorageAccountResource storageAccount = await accountCollection.GetAsync("<storage-account-name>");

// Get a file service resource for the storage account
FileServiceResource fileService = storageAccount.GetFileService();

// Create a new file share (or update if it already exists)
ArmOperation <FileShareResource> fileShareOperation = await fileService
    .GetFileShares()
    .CreateOrUpdateAsync(WaitUntil.Completed, "sample-file-share", new FileShareData()
    {
        ShareQuota = 1024,
        // Add file share properties here
    });

// Get the file share resource
FileShareResource fileShare = fileShareOperation.Value;

FileShareData sınıfını kullanarak dosya paylaşımı özelliklerini yapılandırabilirsiniz. Önceki örnek, ShareQuota özelliğinin nasıl ayarlanacağını gösterir.

Uyarı

Kayıt işlemini gerçekleştirmek için şu Azure RBAC eylemi için izinlere ihtiyacınız vardır: Microsoft.Storage/register/action. Bu izin Katılımcı ve Sahip yerleşik rollerinin parçasıdır.

Örnek: Azure Depolama yönetim kitaplığını kullanarak dosya paylaşımlarını ve anlık görüntüleri listeleme

Aşağıdaki kod örneği, bir depolama hesabında dosya paylaşımlarını ve anlık görüntüleri listelemeyi gösterir:

// Iterate over a collection of file shares and list them along with any snapshots
string expand = "snapshots";
await foreach (FileShareResource shareResource in fileService.GetFileShares().GetAllAsync(expand: expand))
{
    // Call operations on the file share resource

    // For this demo, print out the resource name and snapshot information
    FileShareData resourceData = shareResource.Data;
    Console.WriteLine($"Resource name: {resourceData.Name}");
    if (resourceData.SnapshotOn.HasValue)
    {
        Console.WriteLine($"Snapshot: {resourceData.SnapshotOn}");
    }
}

Azure Dosyalar ile geliştirme hakkında daha fazla bilgi için aşağıdaki kaynaklara bakın: