我目前正在构建一个托管在 Azure 中的多租户 Web 应用程序,它将使用 Azure 文件服务来存储每个客户端数据——每个客户端将使用一个不同的文件共享来提供隔离。
我的问题是 - 我如何才能发现特定文件共享中所有文件的大小?(用于计费目的)。
我有 PowerShell 脚本等来计算 Blob 存储的大小,但没有用于文件存储。有谁知道这是否可能以及如何完成,最好是从我的 C# 应用程序?
我目前正在构建一个托管在 Azure 中的多租户 Web 应用程序,它将使用 Azure 文件服务来存储每个客户端数据——每个客户端将使用一个不同的文件共享来提供隔离。
我的问题是 - 我如何才能发现特定文件共享中所有文件的大小?(用于计费目的)。
我有 PowerShell 脚本等来计算 Blob 存储的大小,但没有用于文件存储。有谁知道这是否可能以及如何完成,最好是从我的 C# 应用程序?
我有 PowerShell 脚本等来计算 Blob 存储的大小,但没有用于文件存储。有谁知道这是否可能以及如何完成,最好是从我的 C# 应用程序?
您可以利用Microsoft Azure Configuration Manager Library for .NET并检索特定文件共享的粗略使用情况,如下所示:
CloudFileShare share = fileClient.GetShareReference("{your-share-name}");
ShareStats stats = share.GetStats();
Console.WriteLine("Current file share usage: {0} GB, maximum size: {1} GB", stats.Usage.ToString(), share.Properties.Quota);
更多详情,您可以参考使用文件存储进行开发。
结果:
Current file share usage: 1 GB, maximum size: 5120 GB
您可以利用Microsoft Azure 存储资源管理器检查文件共享的使用情况和配额,如下所示:
此外,为了检索特定文件共享的确切使用情况,我假设您需要迭代文件共享下的文件和目录并累积文件字节大小。我写了一个代码片段来实现这个目的,你可以参考它:
static void FileShareByteCount(CloudFileDirectory dir,ref long bytesCount)
{
FileContinuationToken continuationToken = null;
FileResultSegment resultSegment = null;
do
{
resultSegment = dir.ListFilesAndDirectoriesSegmented(100, continuationToken, null, null);
if (resultSegment.Results.Count() > 0)
{
foreach (var item in resultSegment.Results)
{
if (item.GetType() == typeof(CloudFileDirectory))
{
var CloudFileDirectory = item as CloudFileDirectory;
Console.WriteLine($" List sub CloudFileDirectory with name:[{CloudFileDirectory.Name}]");
FileShareByteCount(CloudFileDirectory,ref bytesCount);
}
else if (item.GetType() == typeof(CloudFile))
{
var CloudFile = item as CloudFile;
Console.WriteLine($"file name:[{CloudFile.Name}],size:{CloudFile.Properties.Length}B");
bytesCount += CloudFile.Properties.Length;
}
}
}
} while (continuationToken != null);
}
用法:
CloudFileShare share = fileClient.GetShareReference("logs");
CloudFileDirectory rootDir = share.GetRootDirectoryReference();
long bytesCount = 0;
FileShareByteCount(rootDir, ref bytesCount);
Console.WriteLine("Current file share usage: {0:f3} MB", bytesCount / (1024.0 * 1024.0));