Skip to content

Commit 2ad172c

Browse files
authored
Fix: Fixed an issue where empty folders could not be compressed (#15548)
1 parent 212856e commit 2ad172c

File tree

1 file changed

+29
-1
lines changed

1 file changed

+29
-1
lines changed

src/Files.App/Data/Models/CompressArchiveModel.cs

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,35 @@ public async Task<bool> RunCreationAsync()
175175

176176
foreach (string directory in directories)
177177
{
178-
await compressor.CompressDirectoryAsync(directory, ArchivePath, Password);
178+
try
179+
{
180+
await compressor.CompressDirectoryAsync(directory, ArchivePath, Password);
181+
}
182+
catch (SevenZipInvalidFileNamesException)
183+
{
184+
// The directory has no files, so we need to create entries manually
185+
var fileDictionary = new Dictionary<string, string>();
186+
AddEntry(fileDictionary, directory, "");
187+
188+
compressor.CompressFileDictionary(fileDictionary, ArchivePath, Password);
189+
190+
static void AddEntry(IDictionary<string, string> fileDictionary, string directory, string entryPrefix)
191+
{
192+
DirectoryInfo directoryInfo = new DirectoryInfo(directory);
193+
194+
DirectoryInfo[] directories = directoryInfo.GetDirectories();
195+
if (directories.Length == 0)
196+
{
197+
fileDictionary.Add(entryPrefix + directoryInfo.Name, null);
198+
}
199+
else
200+
{
201+
entryPrefix += directoryInfo.Name + Path.DirectorySeparatorChar;
202+
foreach (DirectoryInfo directoryInfo2 in directories)
203+
AddEntry(fileDictionary, directoryInfo2.FullName, entryPrefix);
204+
}
205+
}
206+
}
179207

180208
compressor.CompressionMode = CompressionMode.Append;
181209
}

0 commit comments

Comments
 (0)