diff --git a/src/Files.App/ViewModels/Properties/Items/BaseProperties.cs b/src/Files.App/ViewModels/Properties/Items/BaseProperties.cs index a8b375592bab..28198ef47ef2 100644 --- a/src/Files.App/ViewModels/Properties/Items/BaseProperties.cs +++ b/src/Files.App/ViewModels/Properties/Items/BaseProperties.cs @@ -1,14 +1,7 @@ -using CommunityToolkit.Mvvm.DependencyInjection; -using CommunityToolkit.WinUI; -using Files.App.Extensions; using Files.Backend.Extensions; using Files.Shared.Services.DateTimeFormatter; using Microsoft.UI.Dispatching; -using System; -using System.Collections.Generic; using System.IO; -using System.Threading; -using System.Threading.Tasks; using Windows.Storage.FileProperties; using static Files.Backend.Helpers.NativeFindStorageItemHelper; using FileAttributes = System.IO.FileAttributes; @@ -72,22 +65,23 @@ public async Task CalculateFolderSizeAsync(string path, CancellationToken { do { + if (((FileAttributes)findData.dwFileAttributes & FileAttributes.ReparsePoint) == FileAttributes.ReparsePoint) + // Skip symbolic links and junctions + continue; + if (((FileAttributes)findData.dwFileAttributes & FileAttributes.Directory) != FileAttributes.Directory) { size += findData.GetSize(); ++count; ViewModel.FilesCount++; } - else if (((FileAttributes)findData.dwFileAttributes & FileAttributes.Directory) == FileAttributes.Directory) + else if (findData.cFileName != "." && findData.cFileName != "..") { - if (findData.cFileName != "." && findData.cFileName != "..") - { - var itemPath = Path.Combine(path, findData.cFileName); + var itemPath = Path.Combine(path, findData.cFileName); - size += await CalculateFolderSizeAsync(itemPath, token); - ++count; - ViewModel.FoldersCount++; - } + size += await CalculateFolderSizeAsync(itemPath, token); + ++count; + ViewModel.FoldersCount++; } if (size > ViewModel.ItemSizeBytes) diff --git a/src/Files.Backend/Services/SizeProvider/CachedSizeProvider.cs b/src/Files.Backend/Services/SizeProvider/CachedSizeProvider.cs index a92d2237de52..1267542dc2b6 100644 --- a/src/Files.Backend/Services/SizeProvider/CachedSizeProvider.cs +++ b/src/Files.Backend/Services/SizeProvider/CachedSizeProvider.cs @@ -60,6 +60,10 @@ async Task Calculate(string path, int level = 0) { do { + if (((FileAttributes)findData.dwFileAttributes & FileAttributes.ReparsePoint) == FileAttributes.ReparsePoint) + // Skip symbolic links and junctions + continue; + bool isDirectory = ((FileAttributes)findData.dwFileAttributes & FileAttributes.Directory) is FileAttributes.Directory; if (!isDirectory) {