使用Blazor wasm应用程序(NET标准2.1)和以下代码段中的BlazorFileReader(简称,在我的应用程序中,它分为.razor文件和.razor.cs文件,但已缩短并在此处放在一起为了简单起见):
@inject Blazor.FileReader.IFileReaderService fileReaderService @using Blazor.FileReader; <div class="ml-2"> <input type="file" @ref="InputElement" @onchange="FilesSelected" multiple accept=".txt,.csv" /> </div> @code { ElementReference InputElement; [Parameter] public List<string> FileContent { get; set; } async Task FilesSelected() { foreach (var file in await fileReaderService.CreateReference(InputElement).EnumerateFilesAsync()) { using (Stream stream = await file.OpenReadAsync()) { FileContent = await ReadLinesAsync(stream, Encoding.UTF8); } } } public async Task<List<string>> ReadLinesAsync(Stream stream, Encoding encoding) { using (var reader = new StreamReader(stream, encoding)) { string line; var result = new List<string>(); while ((line = await reader.ReadLineAsync()) != null) { result.Add(line); } return result; } } }
在调试模式下运行此代码(Visual Studio 2019 v 16.6预览)可以读取任何文本文件。但是,在发布模式下运行时,StreamReader.ReadLineAsync()返回空字符串。
有人知道为什么ReadLineAsync()吗?我看过this ...
在下面的代码片段中使用Blazor wasm应用程序(NET标准2.1)和BlazorFileReader(缩短了,在我的应用程序中,它分为.razor文件和.razor.cs文件,但缩短并放置了...
这是Blazor的当前实现中的bug。>>
直到解决,这是一种解决方法(代码或多或少等效...但是有效!):
public async Task<List<string>> ReadLinesAsync(Stream stream, Encoding encoding)
{
using (var reader = new StreamReader(stream, encoding))
{
var result = new List<string>();
string line = await reader.ReadLineAsync();
while (line != null)
{
result.Add(line);
line = await reader.ReadLineAsync();
}
return result;
}
}
这只是一个空答案...