异步流副本不起作用

时间:2018-02-01 10:53:59

标签: c#

我编写了一些应用程序,它应该与byte[]一样使用文件。因此,我创建了ConfigDto类来获取用户的文件路径,并通过AutoMapper将其映射到Config类:

public class ConfigDto 
{
    public string SelectedFilePath { get; set; }
}

public class Config
{
    public Stream SelectedFile { get; set; }
    public string SelectedFileName { get; set; }
}

对于AutoMapper我有以下资料:

public class ConsoleMapperProfile : Profile
{
    public ConsoleMapperProfile()
    {
        CreateMap<ConfigDto, Config>()
            .ForMember(
                dst => dst.SelectedFile,
                m => m.MapFrom(src => File.OpenRead(src.SelectedFilePath))
            ).ForMember(
                dst => dst.SelectedFileName,
                m => ma.MapFrom(src => Path.GetFileName(src.SelectedFilePath)
            );
    }
}

要表示我创建FileEntity类:

的文件
public class FileEntity : IFileEntity
{
    public string Name { get; set; }
    public byte[] Content { get; set; }
}

我尝试通过以下方法将文件读入FileEntity

public async Task<IFileEntity> GetFile(ConfigDto configDto)
{

    using (var srcStream = configDto.SelectedFile)
    {
        using (var dstStream = new MemoryStream())
        {
            await srcStream.CopyToAsync(dstStream);

            var content = dstStream.ToArray();

            try
            {
                return new FileEntity() 
                {
                    paramsDto.CamouflageName,
                    content
                }
            }
            catch (Exception ex) 
            {
                _logger.Exception(ex);
            } 
        }
    }
}

所有这些代码都在.NET Framework Class Library项目中,MyProject.Core名称和.NET Framework版本4.6.1

当然,我有一个名为.NET Framwork Console的{​​{1}}项目,该项目使用此库。

但是当我编译并运行我的控制台应用程序时,它会崩溃,因为它说MyProject.ConsoleFile.Content。当我尝试调试它时,我得到一个非常奇怪的错误。我逐行检查我的代码,当我从null移动到下一行时 - 调试器崩溃了。没有任何事情发生,没有例外或类似的事情。行为类似于var content = dstStream.ToArray();快捷方式。

这种奇怪行为的原因是什么?我该如何解决这个错误?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

这可能是由于调试器本身的异常

我想你正在寻找的是

StreamReader str= new StreamReader(dstStream);
var content = str.ReadToEnd();