# frostfs-sdk-csharp C# implementation of FrostFS SDK. ## Prerequisites ### Get the key for your wallet 1. Get the address ```bash cat | jq .accounts[0].address | tr -d '"' ``` 2. Get the key ```bash neo-go wallet export -w -d ``` ## Example usage ### Container ```csharp using FrostFS.SDK; using FrostFS.SDK.ClientV2; using Microsoft.Extensions.Options; var Key = "KwHDAJ66o8FoLBjVbjP2sWBmgBMGjt7Vv4boA7xQrBoAYBE397Aq"; var Host = "http://172.22.33.44:8080"; var options = Options.Create(new SingleOwnerClientSettings { Key = Key, Host = Host }); using var client = Client.GetSingleOwnerInstance(options); await foreach (var cid in client.ListContainersAsync()) { await client.DeleteContainerAsync(new PrmContainerDelete(cid)); } var placementPolicy = new FrostFsPlacementPolicy(true, new FrostFsReplica(1)); var createContainerParam = new PrmContainerCreate( new FrostFsContainerInfo(BasicAcl.PublicRW, new FrostFsPlacementPolicy(true, new FrostFsReplica(1)))); var containerId = await client.CreateContainerAsync(createContainerParam); using var fileStream = File.OpenRead(@"C:\Users\Paul\Pictures\cat.jpeg"); var param = new PrmObjectPut { Header = new FrostFsObjectHeader( containerId: containerId, type: FrostFsObjectType.Regular, [new FrostFsAttribute("fileName", "test")]), Payload = fileStream }; FrostFsObjectId objectId = await client.PutObjectAsync(param); var filter = new FilterByAttribute(FrostFsMatchType.Equals, "fileName", "test"); await foreach (var objId in client.SearchObjectsAsync(new PrmObjectSearch(containerId) { Filters = [filter] })) { var objHeader = await client.GetObjectHeadAsync(new PrmObjectHeadGet(containerId, objId)); } var @object = await client.GetObjectAsync(new PrmObjectGet(containerId, objectId)); var downloadedBytes = new byte[@object.Header.PayloadLength]; MemoryStream ms = new(downloadedBytes); ReadOnlyMemory? chunk = null; while ((chunk = await @object.ObjectReader!.ReadChunk()) != null) { ms.Write(chunk.Value.Span); } ```