Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

re-add async file reads #209

Merged
merged 1 commit into from
May 17, 2021
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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