Skip to content

Commit 6ebd071

Browse files
committed
fix: 圧縮済みファイルの0バイト出力バグ修正 + タイムスタンプ保持機能追加
1 parent 2e62841 commit 6ebd071

2 files changed

Lines changed: 13 additions & 4 deletions

File tree

‎src/App/MainWindow.xaml.cs‎

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -598,13 +598,21 @@ private ProcessResult ProcessSingleFile(string inputPath, bool compress,
598598
Directory.CreateDirectory(outputDir);
599599

600600
if (compress)
601-
CompressionService.CompressFile(inputPath, outputPath, progress);
601+
{
602+
if (CompressionService.IsCompressed(inputPath))
603+
File.Copy(inputPath, outputPath, true);
604+
else
605+
CompressionService.CompressFile(inputPath, outputPath, progress);
606+
}
602607
else
603608
CompressionService.DecompressFile(inputPath, outputPath, progress);
604609

605610
if (!File.Exists(outputPath))
606611
throw new InvalidOperationException("出力ファイルが作成されませんでした。");
607612

613+
File.SetLastWriteTime(outputPath, File.GetLastWriteTime(inputPath));
614+
File.SetCreationTime(outputPath, File.GetCreationTime(inputPath));
615+
608616
if (File.Exists(backupPath))
609617
File.Delete(backupPath);
610618

‎src/App/Services/CompressionService.cs‎

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,7 @@ public static void CompressFile(string inputPath, string outputPath,
6666
{
6767
{
6868
using var inFs = new FileStream(inputPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
69-
using var outFs = new FileStream(outputPath, FileMode.Create, FileAccess.Write);
7069
using var br = new BinaryReader(inFs, Encoding.UTF8, leaveOpen: true);
71-
using var bw = new BinaryWriter(outFs, Encoding.UTF8, leaveOpen: true);
7270

7371
progress?.Report(0.01);
7472

@@ -82,13 +80,16 @@ public static void CompressFile(string inputPath, string outputPath,
8280
if (token == null)
8381
throw new InvalidDataException("Koikatsuのファイル形式を認識できませんでした。");
8482

85-
// 既に圧縮済みなら例外
83+
// 既に圧縮済みなら例外(出力ファイルを作成する前にチェック)
8684
inFs.Seek(extraStart, SeekOrigin.Begin);
8785
if (GuessCompressed(br))
8886
throw new InvalidOperationException("このファイルは既に圧縮されています。");
8987

9088
inFs.Seek(extraStart, SeekOrigin.Begin);
9189

90+
using var outFs = new FileStream(outputPath, FileMode.Create, FileAccess.Write);
91+
using var bw = new BinaryWriter(outFs, Encoding.UTF8, leaveOpen: true);
92+
9293
// PNG を出力
9394
bw.Write(pngData);
9495

0 commit comments

Comments
 (0)