首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将文件在蔚蓝文件共享和blob之间移动

将文件在蔚蓝文件共享和blob之间移动
EN

Stack Overflow用户
提问于 2017-03-20 18:55:31
回答 1查看 5.9K关注 0票数 3

我必须在同一个存储帐户的共享和blob之间移动一些文件。在搜索了一些代码之后,我得到了以下代码:

代码语言:javascript
运行
复制
CloudFileClient fileClient = account.CreateCloudFileClient();
CloudFileShare share = fileClient.GetShareReference("shareName");
CloudFileDirectory rootDir = share.GetRootDirectoryReference();
CloudFileDirectory videoDirectory = rootDir.GetDirectoryReference(video.StoragePath);
CloudBlobClient blobClient = account.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference(video.StoragePath);
container.CreateIfNotExists();

foreach (var Files in videoDirectory.ListFilesAndDirectories())
{
    var arr = Files.Uri.ToString().Split('/');
    string strFileName = arr[arr.Length - 1];
    CloudFile sourceFile = videoDirectory.GetFileReference(strFileName);
    string fileSas = sourceFile.GetSharedAccessSignature(new SharedAccessFilePolicy()
    {
        Permissions = SharedAccessFilePermissions.Read,
        SharedAccessExpiryTime = DateTime.UtcNow.AddHours(24)
    });

    Uri fileSasUri = new Uri(sourceFile.StorageUri.PrimaryUri.ToString() + fileSas);

    CloudBlockBlob blockBlob = container.GetBlockBlobReference(strFileName);
    blockBlob.StartCopyAsync(fileSasUri).Wait();    //copy the file to blob storage and wait for the operation to complete
    //sourceFile.DeleteAsync();    //delete the file  
}
//videoDirectory.DeleteAsync();    //delete the directory

如果删除行未注释,则目标包含源文件夹中的所有文件,但大小为0。

知道我做错什么了吗?

在复制所有文件之后,我还想删除共享目录。是否有方法检查这些文件是否在目标文件夹中?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-21 09:50:57

据我所知,cloud方法意味着告诉服务器端开始从文件存储中复制blob。

但是它不会等待复制操作完全执行。

因此,如果您想在文件已经完全执行之后删除该文件,则应该使用FetchAttributes方法获取blob的状态。

如果状态完成,则可以删除该文件。

更多细节,请参阅以下代码:

代码语言:javascript
运行
复制
CloudStorageAccount account = CloudStorageAccount.Parse(
"connection string");
        CloudFileClient fileClient = account.CreateCloudFileClient();

        CloudFileShare share = fileClient.GetShareReference("sharetest");

        CloudFileDirectory rootDir = share.GetRootDirectoryReference();

        CloudFileDirectory videoDirectory = rootDir.GetDirectoryReference("TestDirectory");

        CloudBlobClient blobClient = account.CreateCloudBlobClient();

        CloudBlobContainer container = blobClient.GetContainerReference("testdirectory");

        container.CreateIfNotExists();

        foreach (var Files in videoDirectory.ListFilesAndDirectories())
        {
            var arr = Files.Uri.ToString().Split('/');
            string strFileName = arr[arr.Length - 1];
            CloudFile sourceFile = videoDirectory.GetFileReference(strFileName);
            string fileSas = sourceFile.GetSharedAccessSignature(new SharedAccessFilePolicy()
            {
                Permissions = SharedAccessFilePermissions.Read,
                SharedAccessExpiryTime = DateTime.UtcNow.AddHours(24)
            });

            Uri fileSasUri = new Uri(sourceFile.StorageUri.PrimaryUri.ToString() + fileSas);

            CloudBlockBlob blockBlob = container.GetBlockBlobReference(strFileName);

            blockBlob.StartCopyAsync(fileSasUri).Wait();
            blockBlob.FetchAttributes();
            while (blockBlob.CopyState.Status == CopyStatus.Pending)
            {
                Thread.Sleep(50);
                blockBlob.FetchAttributes();
            }

            if (blockBlob.CopyState.Status == CopyStatus.Success)
            {
                sourceFile.DeleteAsync();
            }
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42911770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档