@@ -393,6 +393,18 @@ private static void WriteToJsonFile(string fileName, object value)
393
393
} ;
394
394
395
395
bool shouldWriteFile = true ;
396
+ MemoryStream contentStream = null ;
397
+
398
+ // Generate new content
399
+ contentStream = new MemoryStream ( ) ;
400
+ using ( var streamWriter = new StreamWriter ( contentStream , Encoding . UTF8 , leaveOpen : true ) )
401
+ using ( var jsonWriter = new JsonTextWriter ( streamWriter ) )
402
+ {
403
+ serializer . Serialize ( jsonWriter , value ) ;
404
+ jsonWriter . Flush ( ) ;
405
+ streamWriter . Flush ( ) ;
406
+ }
407
+
396
408
// If file exists, check if content is different using streaming hash comparison
397
409
if ( File . Exists ( fileName ) )
398
410
{
@@ -408,31 +420,26 @@ private static void WriteToJsonFile(string fileName, object value)
408
420
// Hash new content using streaming approach
409
421
Span < byte > newHashBuffer = stackalloc byte [ XxHash64 . HashSizeInBytes ] ;
410
422
var newHasher = new XxHash64 ( ) ;
411
- using ( var memoryStream = new MemoryStream ( ) )
412
- using ( var streamWriter = new StreamWriter ( memoryStream , Encoding . UTF8 , leaveOpen : true ) )
413
- using ( var jsonWriter = new JsonTextWriter ( streamWriter ) )
414
- {
415
- serializer . Serialize ( jsonWriter , value ) ;
416
- jsonWriter . Flush ( ) ;
417
- streamWriter . Flush ( ) ;
418
- memoryStream . Position = 0 ;
419
- newHasher . Append ( memoryStream ) ;
420
- }
423
+ contentStream . Position = 0 ;
424
+ newHasher . Append ( contentStream ) ;
421
425
newHasher . GetCurrentHash ( newHashBuffer ) ;
422
426
423
427
// If hashes are equal, content is the same - don't write
424
428
if ( existingHashBuffer . SequenceEqual ( newHashBuffer ) )
425
429
{
430
+ contentStream ? . Dispose ( ) ;
426
431
return ;
427
432
}
428
433
}
429
434
430
- // Write the new content to file
431
- using ( var fileWriter = new StreamWriter ( fileName , false , Encoding . UTF8 ) )
432
- using ( var jsonWriter = new JsonTextWriter ( fileWriter ) )
435
+ // Write the new content to file using CopyTo
436
+ using ( var fileStream = File . Create ( fileName ) )
433
437
{
434
- serializer . Serialize ( jsonWriter , value ) ;
438
+ contentStream . Position = 0 ;
439
+ contentStream . CopyTo ( fileStream ) ;
435
440
}
441
+
442
+ contentStream ? . Dispose ( ) ;
436
443
}
437
444
}
438
445
}
0 commit comments