Skip to content

Commit

Permalink
re-add async file reads
Browse files Browse the repository at this point in the history
closes #127
  • Loading branch information
belav committed May 17, 2021
1 parent 45a849b commit 740a7e5
Showing 1 changed file with 26 additions and 15 deletions.
41 changes: 26 additions & 15 deletions Src/CSharpier/FileReader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,39 +9,50 @@ namespace CSharpier
{
public static class FileReader
{
private static readonly SemaphoreSlim Semaphore = new(10);

static FileReader()
{
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
}

#pragma warning disable 1998
public static async Task<FileReaderResult> ReadFile(
#pragma warning restore 1998
string filePath,
IFileSystem fileSystem,
CancellationToken cancellationToken
) {
var defaultedEncoding = false;

using var fileStream = fileSystem.File.OpenRead(filePath);
var detectionResult = CharsetDetector.DetectFromStream(fileStream);
var encoding = detectionResult?.Detected?.Encoding;
if (encoding == null)
await Semaphore.WaitAsync(cancellationToken);
try
{
defaultedEncoding = true;
encoding = Encoding.Default;
}
await using var fileStream = fileSystem.File.OpenRead(filePath);
var detectionResult = CharsetDetector.DetectFromStream(fileStream);
var encoding = detectionResult?.Detected?.Encoding;
if (encoding == null)
{
defaultedEncoding = true;
encoding = Encoding.Default;
}

fileStream.Seek(0, SeekOrigin.Begin);

fileStream.Seek(0, SeekOrigin.Begin);
// this fixes an issue with ANSI encoded files like csharpier-repos\AutoMapper\src\UnitTests\Internationalization.cs
var encodingToRead = encoding.CodePage == 852
? Encoding.GetEncoding(1252)
: encoding;

// this fixes an issue with ANSI encoded files like csharpier-repos\AutoMapper\src\UnitTests\Internationalization.cs
var encodingToRead = encoding.CodePage == 852 ? Encoding.GetEncoding(1252) : encoding;
using var streamReader = new StreamReader(fileStream, encodingToRead);

using var streamReader = new StreamReader(fileStream, encodingToRead);
var fileContents = await streamReader.ReadToEndAsync();

var fileContents = streamReader.ReadToEnd();
return new FileReaderResult(encoding, fileContents, defaultedEncoding);
}

return new FileReaderResult(encoding, fileContents, defaultedEncoding);
finally
{
Semaphore.Release();
}
}
}

Expand Down

0 comments on commit 740a7e5

Please sign in to comment.