Azure 文件共享的 .NET ShareFileItem 属性为空

.NET ShareFileItem properties null for Azure File Share

我正在尝试创建一个 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:

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

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

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

更新

要获取属性,您需要做的是在其上创建 ShareFileClient using ShareDirectoryClient.GetFileClient and then call 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: {fileProperties.Value.LastModified.ToString()}");
        }
    }
}