@@ -46,7 +46,15 @@ public static async Task ConvertAsync(Stream source, Stream target, Cancel token
4646
4747 static Archive CreateArchive ( Stream target ) => new ( target , ZipArchiveMode . Create , leaveOpen : true ) ;
4848
49- static Archive ReadArchive ( Stream source ) => new ( source , ZipArchiveMode . Read , leaveOpen : false ) ;
49+ static Archive ReadArchive ( Stream source )
50+ {
51+ if ( source is MemoryStream memoryStream )
52+ {
53+ memoryStream . Position = 0 ;
54+ }
55+
56+ return new ( source , ZipArchiveMode . Read , leaveOpen : true ) ;
57+ }
5058
5159 static void DuplicateEntry ( Entry sourceEntry , Archive targetArchive )
5260 {
@@ -58,7 +66,7 @@ static void DuplicateEntry(Entry sourceEntry, Archive targetArchive)
5866 using var sourceStream = sourceEntry . Open ( ) ;
5967 var targetEntry = CreateEntry ( sourceEntry , targetArchive ) ;
6068 using var targetStream = targetEntry . Open ( ) ;
61- if ( IsRels ( sourceEntry ) )
69+ if ( IsRelationships ( sourceEntry ) )
6270 {
6371 var xml = PatchRelationships ( sourceStream ) ;
6472 xml . Save ( targetStream , SaveOptions . None ) ;
@@ -79,7 +87,7 @@ static async Task DuplicateEntryAsync(Entry sourceEntry, Archive targetArchive,
7987 using var sourceStream = await sourceEntry . OpenAsync ( cancel ) ;
8088 var targetEntry = CreateEntry ( sourceEntry , targetArchive ) ;
8189 using var targetStream = await targetEntry . OpenAsync ( cancel ) ;
82- if ( IsRels ( sourceEntry ) )
90+ if ( IsRelationships ( sourceEntry ) )
8391 {
8492 var xml = PatchRelationships ( sourceStream ) ;
8593
@@ -91,11 +99,12 @@ static async Task DuplicateEntryAsync(Entry sourceEntry, Archive targetArchive,
9199 }
92100 }
93101
102+ static XName relationshipName = XName . Get ( "Relationship" , "http://schemas.openxmlformats.org/package/2006/relationships" ) ;
103+
94104 static XDocument PatchRelationships ( Stream sourceStream )
95105 {
96106 var xml = XDocument . Load ( sourceStream ) ;
97- var name = XName . Get ( "Relationship" , "http://schemas.openxmlformats.org/package/2006/relationships" ) ;
98- var relationships = xml . Descendants ( name ) . ToList ( ) ;
107+ var relationships = xml . Descendants ( relationshipName ) . ToList ( ) ;
99108
100109 for ( var index = 0 ; index < relationships . Count ; index ++ )
101110 {
@@ -127,6 +136,6 @@ static bool IsPsmdcp(Entry entry) =>
127136 entry . FullName . StartsWith ( "package/services/metadata/core-properties/" ) &&
128137 entry . Name . EndsWith ( "psmdcp" ) ;
129138
130- static bool IsRels ( Entry _ ) =>
139+ static bool IsRelationships ( Entry _ ) =>
131140 _ . FullName == "_rels/.rels" ;
132141}
0 commit comments