StreamReader.ReadLineAsync()在发布模式下但在调试模式下(在Blazor WASM应用程序中)返回string.empty]]

问题描述 投票:2回答:2

使用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 streamreader webassembly
2个回答
2
投票

这是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;
        }
    }

0
投票

这只是一个空答案...

© www.soinside.com 2019 - 2024. All rights reserved.