【问题标题】:.NET ShareFileItem properties null for Azure File ShareAzure 文件共享的 .NET ShareFileItem 属性 null
【发布时间】:2021-11-26 12:56:29
【问题描述】:

我正在尝试创建一个 azure 函数来清除超过某个年龄的文件,但是当我访问文件的属性时它们都为空,我做错了什么?!

using System;
using System.Collections.Generic;
using Azure.Storage.Files.Shares;
using Azure.Storage.Files.Shares.Models;
using Microsoft.Azure.WebJobs;
using Microsoft.Extensions.Logging;

namespace somewhere
{
    public static class FileShareCleaner
    {
        [FunctionName("FileShareCleaner")]
        public static void Run([TimerTrigger("*/10 */1 * * * *")]TimerInfo myTimer, ILogger log)
        {
            string connectionString = Environment.GetEnvironmentVariable("FileShareConnectionString");
            string shareName = "files";

            ShareServiceClient shareserviceclient = new ShareServiceClient(connectionString);
            ShareClient shareclient = shareserviceclient.GetShareClient(shareName);

            Queue<ShareDirectoryClient> remaining = new Queue<ShareDirectoryClient>();
            remaining.Enqueue(shareclient.GetRootDirectoryClient());
            while (remaining.Count > 0)
            {
                ShareDirectoryClient dir = remaining.Dequeue();
                foreach (ShareFileItem item in dir.GetFilesAndDirectories())
                {
                    log.LogInformation(item.Name);

                    if (item.IsDirectory)
                    {
                        remaining.Enqueue(dir.GetSubdirectoryClient(item.Name));
                    }
                    else
                    {
                        log.LogInformation($"time: {item.Properties.LastModified.ToString()}");
                    }
                        
                }
            }
        }
    }
}

代码找到文件但所有属性为空:

[2021-10-06T10:04:50.048Z] Executing 'FileShareCleaner' (Reason='Timer fired at 2021-10-06T11:04:50.0126493+01:00', Id=af5c7864-4326-4c97-b9d6-82bf98726f4e)
[2021-10-06T10:04:50.341Z] 0304ccf5-4e32-4206-b903-af5acc8652dc.dat
[2021-10-06T10:04:50.344Z] time:
[2021-10-06T10:04:50.347Z] 06716b40-cce4-4ef0-86ec-329dcaeddbf4.dat
[2021-10-06T10:04:50.350Z] time:
[2021-10-06T10:04:50.353Z] 20735b83-d8b2-4110-9ee6-6154b97c154c.dat
[2021-10-06T10:04:50.355Z] time:
[2021-10-06T10:04:50.358Z] 2696a0eb-2aed-4200-b495-0dd2a7152139.dat
[2021-10-06T10:04:50.361Z] time:

【问题讨论】:

    标签: c# .net azure-functions azure-storage azure-files


    【解决方案1】:

    你没有做错任何事。这是预期的行为。

    默认情况下,当文件和文件夹列在文件共享中时,仅返回文件的大小。

    要获取文件的其他属性,例如上次修改或内容属性,您需要分别获取每个文件的属性。

    更新

    要获取这些属性,您需要做的是使用ShareDirectoryClient.GetFileClient 创建ShareFileClient 的实例,然后在其上调用GetProperties。您的代码如下所示:

    while (remaining.Count > 0)
    {
        ShareDirectoryClient dir = remaining.Dequeue();
        foreach (ShareFileItem item in dir.GetFilesAndDirectories())
        {
            log.LogInformation(item.Name);
    
            if (item.IsDirectory)
            {
                remaining.Enqueue(dir.GetSubdirectoryClient(item.Name));
            }
            else
            {
                var fileClient = dir.GetFileClient(item.Name);
                var fileProperties = fileClient.GetProperties();
                log.LogInformation($"time: {properties.LastModified.ToString()}");
            }
        }
    }
    

    【讨论】:

    • 谢谢 - 有没有一个例子/文档可以用来做什么?我尝试使用 CloudFile 对象,但也没有用
    • 用示例代码更新了我的答案(虽然未经测试)。 HTH。
    • 确实如此,谢谢!我不得不将日志语句稍微更改为fileProperties.Value.LastModified.ToString()
    猜你喜欢
    • 1970-01-01
    • 2016-07-03
    • 2022-06-30
    • 1970-01-01
    • 1970-01-01
    • 2021-12-08
    • 2020-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多