

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 建立、列出和刪除儲存貯體
<a name="examples-s3-buckets"></a>

Amazon Simple Storage Service (Amazon S3) 中的每個*物件*或檔案都包含在代表物件資料夾的*儲存貯*體中。每個儲存貯體都有一個全域唯一的名稱 AWS。如需詳細資訊，請參閱《[Amazon Simple Storage Service 使用者指南》中的使用 Amazon S3 儲存貯](https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingBucket.html)體。

## 先決條件
<a name="codeExamplePrereq"></a>

開始之前，建議您先閱讀[開始使用 適用於 C\$1\$1 的 AWS SDK](getting-started.md)。

下載範例程式碼並建置解決方案，如 中所述[程式碼範例入門](getting-started-code-examples.md)。

若要執行範例，您的程式碼用來發出請求的使用者設定檔必須具有 AWS （針對 服務和 動作） 的適當許可。如需詳細資訊，請參閱[提供 AWS 登入](credentials.md)資料。

## 列出儲存貯體
<a name="list-buckets"></a>

若要執行`list_buckets`範例，請在命令提示字元中，導覽至建置系統建立建置可執行檔的資料夾。像 一樣執行可執行檔 `run_list_buckets`（您的完整可執行檔名會根據您的作業系統而有所不同）。如果您有任何儲存貯體，輸出會列出您帳戶的儲存貯體，或者如果您沒有任何儲存貯體，則會顯示空白清單。

在 中`list_buckets.cpp`，有兩種方法。
+ `main()` 呼叫 `ListBuckets()`。
+ `ListBuckets()` 使用 SDK 查詢您的儲存貯體。

`S3Client` 物件會呼叫 SDK 的 `ListBuckets()`方法。如果成功， 方法會傳回包含`ListBucketOutcome`物件的`ListBucketResult`物件。`ListBucketResult` 物件會呼叫 `GetBuckets()`方法，以取得包含您帳戶中每個 Amazon S3 儲存貯體相關資訊的`Bucket`物件清單。

 **Code** 

```
bool AwsDoc::S3::listBuckets(const Aws::S3::S3ClientConfiguration &clientConfig) {
    Aws::S3::S3Client client(clientConfig);

    auto outcome = client.ListBuckets();

    bool result = true;
    if (!outcome.IsSuccess()) {
        std::cerr << "Failed with error: " << outcome.GetError() << std::endl;
        result = false;
    } else {
        std::cout << "Found " << outcome.GetResult().GetBuckets().size() << " buckets\n";
        for (auto &&b: outcome.GetResult().GetBuckets()) {
            std::cout << b.GetName() << std::endl;
        }
    }

    return result;
}
```

請參閱 Github 上的完整 [list\$1buckets 範例](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/s3/list_buckets.cpp)。

## 建立 儲存貯體
<a name="create-bucket"></a>



若要執行`create_bucket`範例，請在命令提示字元中，導覽至建置系統建立建置可執行檔的資料夾。像 一樣執行可執行檔 `run_create_bucket`（您的完整可執行檔名會根據您的作業系統而有所不同）。程式碼會在您的帳戶下建立空儲存貯體，然後顯示請求的成功或失敗。

在 中`create_bucket.cpp`，有兩種方法。
+ `main()` 呼叫 `CreateBucket()`。在 中`main()`，您需要使用 將 AWS 區域 變更為帳戶的 區域`enum`。您可以登入 並找到右上角的區域[AWS 管理主控台](https://console.aws.amazon.com/)，以檢視您 帳戶的 區域。
+ `CreateBucket()` 使用 SDK 來建立儲存貯體。



`S3Client` 物件會呼叫 SDK 的 `CreateBucket()`方法，`CreateBucketRequest`以儲存貯體的名稱傳入 。根據預設，儲存貯體會在 *us-east-1* （維吉尼亞北部） 區域中建立。如果您的區域不是 *us-east-1*，則程式碼會設定儲存貯體限制，以確保儲存貯體在您的區域中建立。

 **Code** 

```
bool AwsDoc::S3::createBucket(const Aws::String &bucketName,
                              const Aws::S3::S3ClientConfiguration &clientConfig) {
    Aws::S3::S3Client client(clientConfig);
    Aws::S3::Model::CreateBucketRequest request;
    request.SetBucket(bucketName);

    if (clientConfig.region != "us-east-1") {
        Aws::S3::Model::CreateBucketConfiguration createBucketConfig;
        createBucketConfig.SetLocationConstraint(
                Aws::S3::Model::BucketLocationConstraintMapper::GetBucketLocationConstraintForName(
                        clientConfig.region));
        request.SetCreateBucketConfiguration(createBucketConfig);
    }

    Aws::S3::Model::CreateBucketOutcome outcome = client.CreateBucket(request);
    if (!outcome.IsSuccess()) {
        auto err = outcome.GetError();
        std::cerr << "Error: createBucket: " <<
                  err.GetExceptionName() << ": " << err.GetMessage() << std::endl;
    } else {
        std::cout << "Created bucket " << bucketName <<
                  " in the specified AWS Region." << std::endl;
    }

    return outcome.IsSuccess();
}
```

請參閱 Github 上完整的 [create\$1buckets 範例](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/s3/create_bucket.cpp)。

## 刪除 儲存貯體
<a name="delete-bucket"></a>



若要執行`delete_bucket`範例，請在命令提示字元中，導覽至建置系統建立建置可執行檔的資料夾。像 一樣執行可執行檔 `run_delete_bucket`（您的完整可執行檔名會根據您的作業系統而有所不同）。程式碼會刪除您帳戶中指定的儲存貯體，然後顯示請求的成功或失敗。

在 `delete_bucket.cpp`中有兩種方法。
+ `main()` 呼叫 `DeleteBucket()`。在 中`main()`，您需要使用 將 AWS 區域 變更為帳戶的 區域`enum`。您也需要將 `bucket_name` 變更為要刪除的儲存貯體名稱。
+ `DeleteBucket()` 使用 SDK 刪除儲存貯體。



`S3Client` 物件使用 SDK 的 `DeleteBucket()`方法，傳入具有要刪除之儲存貯體名稱的`DeleteBucketRequest`物件。儲存貯體必須為空，才能成功。

 **Code**

```
bool AwsDoc::S3::deleteBucket(const Aws::String &bucketName,
                              const Aws::S3::S3ClientConfiguration &clientConfig) {

    Aws::S3::S3Client client(clientConfig);

    Aws::S3::Model::DeleteBucketRequest request;
    request.SetBucket(bucketName);

    Aws::S3::Model::DeleteBucketOutcome outcome =
            client.DeleteBucket(request);

    if (!outcome.IsSuccess()) {
        const Aws::S3::S3Error &err = outcome.GetError();
        std::cerr << "Error: deleteBucket: " <<
                  err.GetExceptionName() << ": " << err.GetMessage() << std::endl;
    } else {
        std::cout << "The bucket was deleted" << std::endl;
    }

    return outcome.IsSuccess();
}
```

請參閱 Github 上完整的 [delete\$1bucket 範例](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/s3/delete_bucket.cpp)。