Skip to content

Commit 1c9588c

Browse files
authored
Fix: Fixed folder size calculation (#12207)
1 parent 296548a commit 1c9588c

File tree

2 files changed

+13
-15
lines changed

2 files changed

+13
-15
lines changed

src/Files.App/ViewModels/Properties/Items/BaseProperties.cs

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,7 @@
1-
using CommunityToolkit.Mvvm.DependencyInjection;
2-
using CommunityToolkit.WinUI;
3-
using Files.App.Extensions;
41
using Files.Backend.Extensions;
52
using Files.Shared.Services.DateTimeFormatter;
63
using Microsoft.UI.Dispatching;
7-
using System;
8-
using System.Collections.Generic;
94
using System.IO;
10-
using System.Threading;
11-
using System.Threading.Tasks;
125
using Windows.Storage.FileProperties;
136
using static Files.Backend.Helpers.NativeFindStorageItemHelper;
147
using FileAttributes = System.IO.FileAttributes;
@@ -72,22 +65,23 @@ public async Task<long> CalculateFolderSizeAsync(string path, CancellationToken
7265
{
7366
do
7467
{
68+
if (((FileAttributes)findData.dwFileAttributes & FileAttributes.ReparsePoint) == FileAttributes.ReparsePoint)
69+
// Skip symbolic links and junctions
70+
continue;
71+
7572
if (((FileAttributes)findData.dwFileAttributes & FileAttributes.Directory) != FileAttributes.Directory)
7673
{
7774
size += findData.GetSize();
7875
++count;
7976
ViewModel.FilesCount++;
8077
}
81-
else if (((FileAttributes)findData.dwFileAttributes & FileAttributes.Directory) == FileAttributes.Directory)
78+
else if (findData.cFileName != "." && findData.cFileName != "..")
8279
{
83-
if (findData.cFileName != "." && findData.cFileName != "..")
84-
{
85-
var itemPath = Path.Combine(path, findData.cFileName);
80+
var itemPath = Path.Combine(path, findData.cFileName);
8681

87-
size += await CalculateFolderSizeAsync(itemPath, token);
88-
++count;
89-
ViewModel.FoldersCount++;
90-
}
82+
size += await CalculateFolderSizeAsync(itemPath, token);
83+
++count;
84+
ViewModel.FoldersCount++;
9185
}
9286

9387
if (size > ViewModel.ItemSizeBytes)

src/Files.Backend/Services/SizeProvider/CachedSizeProvider.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,10 @@ async Task<ulong> Calculate(string path, int level = 0)
6060
{
6161
do
6262
{
63+
if (((FileAttributes)findData.dwFileAttributes & FileAttributes.ReparsePoint) == FileAttributes.ReparsePoint)
64+
// Skip symbolic links and junctions
65+
continue;
66+
6367
bool isDirectory = ((FileAttributes)findData.dwFileAttributes & FileAttributes.Directory) is FileAttributes.Directory;
6468
if (!isDirectory)
6569
{

0 commit comments

Comments
 (0)