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