|
3 | 3 | // Website: https://www.blazor.zone or https://argozhang.github.io/ |
4 | 4 |
|
5 | 5 | using System.Buffers; |
| 6 | +using System.Text; |
6 | 7 |
|
7 | 8 | namespace BootstrapBlazor.CssBundler; |
8 | 9 |
|
@@ -58,42 +59,33 @@ static void DoBundler(string bundlerFile, BundlerOptions option) |
58 | 59 | return; |
59 | 60 | } |
60 | 61 |
|
61 | | - var buffer = ArrayPool<byte>.Shared.Rent(64 * 1024); |
62 | | - try |
| 62 | + using var writer = File.OpenWrite(Path.Combine(rootFolder, option.OutputFileName)); |
| 63 | + foreach (var file in option.InputFiles) |
63 | 64 | { |
64 | | - using var writer = File.OpenWrite(Path.Combine(rootFolder, option.OutputFileName)); |
65 | | - foreach (var file in option.InputFiles) |
| 65 | + var inputFile = Path.Combine(rootFolder, file); |
| 66 | + if (!File.Exists(inputFile)) |
66 | 67 | { |
67 | | - var inputFile = Path.Combine(rootFolder, file); |
68 | | - if (!File.Exists(inputFile)) |
69 | | - { |
70 | | - continue; |
71 | | - } |
72 | | - |
73 | | - using var reader = File.OpenRead(inputFile); |
74 | | - var read = reader.Read(buffer, 0, buffer.Length); |
75 | | - if (read >= 3 && buffer[0] == 0xEF && buffer[1] == 0xBB && buffer[2] == 0xBF) |
76 | | - { |
77 | | - writer.Write(buffer, 3, read - 3); |
78 | | - } |
79 | | - else |
80 | | - { |
81 | | - writer.Write(buffer, 0, read); |
82 | | - } |
83 | | - |
84 | | - while (reader.Position < reader.Length) |
85 | | - { |
86 | | - read = reader.Read(buffer, 0, buffer.Length); |
87 | | - writer.Write(buffer, 0, read); |
88 | | - } |
| 68 | + continue; |
89 | 69 | } |
90 | | - writer.Close(); |
91 | | - } |
92 | | - finally |
93 | | - { |
94 | | - ArrayPool<byte>.Shared.Return(buffer); |
| 70 | + using var reader = File.OpenRead(inputFile); |
| 71 | + if (IsUtf8Bom(reader)) |
| 72 | + { |
| 73 | + reader.Seek(0, SeekOrigin.Begin); |
| 74 | + } |
| 75 | + reader.CopyTo(writer); |
95 | 76 | } |
| 77 | + writer.Close(); |
96 | 78 |
|
97 | 79 | Console.WriteLine($"Bundler Completed .... {option.OutputFileName}"); |
98 | 80 | } |
| 81 | + |
| 82 | + private static bool IsUtf8Bom(Stream stream) |
| 83 | + { |
| 84 | + Span<byte> buffer = stackalloc byte[3]; |
| 85 | + if (stream.Read(buffer) != buffer.Length) |
| 86 | + { |
| 87 | + return false; |
| 88 | + } |
| 89 | + return buffer.SequenceEqual(Encoding.UTF8.GetPreamble()); |
| 90 | + } |
99 | 91 | } |
0 commit comments