首页 > 其他分享 >net core流相关

net core流相关

时间:2023-11-02 10:14:55浏览次数:36  
标签:core stream byte file new var 相关 net public

 

 

Stream.Read与StreamReader.Read都可以读取流中的信息

        /// <summary>
        /// 将流中的内容以字节码的形式读出来
        /// </summary>
        /// <param name="stream"></param>
        /// <returns></returns>
        public static byte[] StreamToBytes(Stream stream)
        {
            byte[] bytes = new byte[stream.Length];
            stream.Read(bytes, 0, bytes.Length);
            stream.Seek(0, SeekOrigin.Begin);
            return bytes;
        }

 

 常见的Reader和Writter类型

  • BinaryReader和 BinaryWriter :用于将基元数据类型作为二进制值进行读取和写入。
  • StreamReader 和 StreamWriter : 用于通过使用编码值在字符和字节之间来回转换来读取和写入字符。
  • StringReader 和 StringWriter:用于从字符串读取字符以及将字符写入字符串中。
  • TextReader和 TextWriter :用作其他读取器和编写器(读取和写入字符和字符串,而不是二进制数据)的抽象基类。
        public static string ReadString(Stream stream)
        {
            StreamReader reader = new StreamReader(stream, Encoding.Default);
            var ret = reader.ReadLine();
            return ret;
        }

 

 

压缩ZIP

将内存中的文件压缩成ZIP并返回字节码

        /// <summary>
        /// 将指定的文件列表按路径打包成zip文件
        /// </summary>
        /// <param name="files"></param>
        /// <returns></returns>
        public static byte[] GetZipArchive(List<InMemoryFile> files)
        {
            byte[] archiveFile;
            //将带有路径的文件获取出来并先创建好对应路径的文件夹
            //List<InMemoryFile> folders = files.Where(u => !string.IsNullOrWhiteSpace(u.Path)).GroupBy(i => i.Path).FirstOrDefault().ToList();


            //再将文件放在到相应的文件夹中
            using (var archiveStream = new MemoryStream())
            {
                using (var archive = new ZipArchive(archiveStream, ZipArchiveMode.Create, true))
                {
                    foreach (var file in files)
                    {
                        var zipArchiveEntry = archive.CreateEntry($"{file.Path}{file.FileName}", CompressionLevel.Fastest);
                        using (var zipStream = zipArchiveEntry.Open())
                            zipStream.Write(file.Content, 0, file.Content.Length);
                    }
                }

                archiveFile = archiveStream.ToArray();
            }

            return archiveFile;
        }
    /// <summary>
    /// 存放于内存中的文件
    /// </summary>
    public class InMemoryFile
    {
        /// <summary>
        /// 文件名,包含后缀,但不包含压缩后的文件夹路径
        /// </summary>
        public string FileName { get; set; }
        /// <summary>
        /// 文件内容
        /// </summary>
        public byte[] Content { get; set; }
        /// <summary>
        /// 在压缩文件中的存放路径,如WebResource/
        /// </summary>
        public string Path { get; set; }
    }

 

 

 

 

从FormFIle中的ZIP里读取某个文件

        public static byte[] GetFileFromZipArchive(IFormFile zipFile, string fullFileName)
        {
            var zipFilePath = zipFile.ContentType;
            var stream = zipFile.OpenReadStream();
            using (ZipArchive archive =new ZipArchive(stream, ZipArchiveMode.Read))
            {
                var file = archive.Entries.FirstOrDefault(u => u.FullName == fullFileName);
                if (file != null)
                {
                    using var memoryStream = new MemoryStream();
                    file.Open().CopyTo(memoryStream);
                    var content = memoryStream.ToArray();
                    return content;
                }
            }
            return null;
        }

 

标签:core,stream,byte,file,new,var,相关,net,public
From: https://www.cnblogs.com/liaochifei/p/17784860.html

相关文章

  • 模拟实现.net中的Task机制:探索异步编程的奥秘
    .net中使用Task可以方便地编写异步程序,为了更好地理解Task及其调度机制,接下来模拟Task的实现,目的是搞清楚:Task是什么Task是如何被调度的基本的Task模拟实现从最基本的Task用法开始Task.Run(Actionaction)这个命令的作用是将action作为一项任务提交给调度器,调度器会安排......
  • 如何在安装 pytorch 的时候,不安装 nvidia 相关的包?
    要在安装PyTorch时避免安装与NVIDIA相关的包,可以使用以下方法:使用CPU版本的PyTorch:PyTorch提供了CPU版本,该版本不需要与NVIDIA相关的包。你可以使用以下命令安装CPU版本的PyTorch:pipinstalltorch-fhttps://download.pytorch.org/whl/cpu/torch_stable.html这将仅安装与CPU兼容......
  • .NET6 使用AutoMapper
    .NET6使用AutoMapper 一、Net6环境下的.netcore项目里如何使用AutoMapper实现依赖注入。注:AutoMapper是一个对象-对象映射器,可以将一个对象映射到另一个对象。第一步,在Nuget引入AutoMapper、AutoMapper.Extensions.DependencyInjection这两个NuGet包  ......
  • 904-907 Prometheus自动发现机制 kube-state-metrics和metrics-server Prometheus监
    一、Prometheus自动发现机制服务发现机制:为了实现自动将被监控目标添加到PermethusPrometheus数据源的配置分为静态配置和动态发现,常见为以下几类:static_configs:静态服务发现,即将配置直接写到配置文件或Configmapfile_sd_config:文件服务器发现,创建一个专门配置target的配置文......
  • 学习笔记:关于MySQL的相关基础
    showdatabases;showtablesfrominformation_schema;--测试一下注释#注释第二种--列出所有的数据库SHOWdatabases;--查看某一个数据库里面所有的表USEdatabasename;usemysql;showtables;showtablesfrommysql;--select特殊应用查看当前时......
  • Linux操作之存储空间相关
    1、内存(1)、简介Linux中swap与memory。对于memory没什么可说的就是机器的物理内存,读写速度低于cpu一个量级,但是高于磁盘不止一个量级。所以,程序和数据如果在内存的话,会有非常快的读写速度。但是,内存的造价是要高于磁盘的,虽然相对来说价格一直在降低。除此之外,内存的断电丢失数......
  • 深度学习相关问题的记录:验证集loss上升,准确率却上升
    验证集loss上升,准确率却上升验证集loss上升,acc也上升这种现象很常见,原因是过拟合或者训练验证数据分布不一致导致,即在训练后期,预测的结果趋向于极端,使少数预测错的样本主导了loss,但同时少数样本不影响整体的验证acc情况。ICML2020发表了一篇文章:《DoWeNeedZeroTrainingLossAf......
  • network提示use --host to expose
    项目运行之后,想要通过局域网ip访问项目,无法访问:查了一下问题,没有配置netWork,在vite.config.ts如下配置,就可以了server:{host:'0.0.0.0'} 有问题欢迎交流!!! ......
  • Exception in thread "main" java.net.BindException: Cannot assign requested addre
    两种情况1.端口号被占用,导致地址无法绑定#windows查看端口pidnetstat-aon|findstr8080(端口号)#linux查看端口占用netstat-anp|grep80802.ip地址与本机地址不匹配,导致地址无法绑定#windows查看ipipconfig#linux查看ipifconfig......
  • CentOS7.6 安装Telnet服务
    Telnet服务简介Telnet协议是TCP/IP协议族中的一员,是Internet远程登录服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。在终端使用者的电脑上使用Telnet程序,用它连接到服务器。终端使用者可以在Telnet程序中输入命令,这些命令会在服务器......