@@ -73,13 +73,13 @@ private static int GetPackageCount(IEnumerable<IDisk> disks)
7373 return count ;
7474 }
7575
76- private static List < CabinetFileInfo > GetCabinetFileInfoForCbsPackage ( string inf , IPartition partition )
76+ private static List < CabinetFileInfo > GetCabinetFileInfoForCbsPackage ( string driverFolder , IPartition partition )
7777 {
7878 List < CabinetFileInfo > fileMappings = [ ] ;
7979
8080 IFileSystem fileSystem = partition . FileSystem ! ;
8181
82- foreach ( string entry in fileSystem . GetFiles ( inf , "*" , SearchOption . AllDirectories ) )
82+ foreach ( string entry in fileSystem . GetFiles ( driverFolder , "*" , SearchOption . AllDirectories ) )
8383 {
8484 if ( fileSystem . DirectoryExists ( entry ) )
8585 {
@@ -147,32 +147,42 @@ private static void BuildCabinets(IEnumerable<IDisk> disks, string outputPath, U
147147
148148 string fileStatus = "" ;
149149
150- if ( ! File . Exists ( cabFile ) )
150+ // Trim fileName from output
151+ string DestinationFolder = Path . GetDirectoryName ( cabFile ) ! ;
152+
153+ if ( ! Directory . Exists ( DestinationFolder ) )
151154 {
152155 IEnumerable < CabinetFileInfo > fileMappings = GetCabinetFileInfoForCbsPackage ( folder , partition ) ;
153156
154- // Cab Creation is only supported on Windows
155- if ( RuntimeInformation . IsOSPlatform ( OSPlatform . Windows ) )
157+ if ( fileMappings . Any ( ) )
156158 {
157- if ( fileMappings . Any ( ) )
159+ if ( Path . GetDirectoryName ( cabFile ) is string directory && ! Directory . Exists ( directory ) )
158160 {
159- if ( Path . GetDirectoryName ( cabFile ) is string directory && ! Directory . Exists ( directory ) )
161+ Directory . CreateDirectory ( directory ) ;
162+ }
163+
164+ foreach ( CabinetFileInfo fileMapping in fileMappings )
165+ {
166+ string fileDestinationPath = Path . Combine ( DestinationFolder , fileMapping . FileName ) ;
167+ string ? fileRootPath = Path . GetDirectoryName ( fileDestinationPath ) ! ;
168+
169+ if ( ! Directory . Exists ( fileRootPath ) )
160170 {
161- Directory . CreateDirectory ( directory ) ;
171+ Directory . CreateDirectory ( fileRootPath ) ;
162172 }
163173
164- CabinetBuilder . BuildCab ( cabFile , fileMappings , ref fileStatus ) ;
165- }
166- }
174+ using FileStream fileStream = new ( fileDestinationPath , FileMode . Create ) ;
175+ fileMapping . FileStream . CopyTo ( fileStream ) ;
176+ fileMapping . FileStream . Close ( ) ;
167177
168- foreach ( CabinetFileInfo fileMapping in fileMappings )
169- {
170- fileMapping . FileStream . Close ( ) ;
178+ File . SetAttributes ( fileDestinationPath , fileMapping . Attributes ) ;
179+ File . SetLastWriteTimeUtc ( fileDestinationPath , fileMapping . DateTime ) ;
180+ }
171181 }
172182 }
173183 else
174184 {
175- Logging . Log ( $ "CAB already exists! Skipping. { cabFile } ", LoggingLevel . Warning ) ;
185+ Logging . Log ( $ "Driver already exists! Skipping. { DestinationFolder } ", LoggingLevel . Warning ) ;
176186 }
177187
178188 if ( i != packagesCount - 1 )
0 commit comments