@@ -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