【问题标题】:How to get text of .dat files of the zip files which are available in sub folder of one zip file in asp.net core 6.0?如何获取在 asp.net core 6.0 中一个 zip 文件的子文件夹中可用的 zip 文件的 .dat 文件的文本?
【发布时间】:2022-11-30 13:59:26
【问题描述】:

我的IFormFile zip 文件包含多个文件夹,其中又包含包含 .dat 类型文件的 zip 文件,因此需要读取此 .dat 文件的文本数据。

我试过如下

[HttpPost]
    public async Task<IActionResult> RequestFiles()
    {
        try
        {
            IFormFile file = Request.Form.Files[0];
            Stream stream = file.OpenReadStream();
            using (ZipArchive archive = new ZipArchive(stream, ZipArchiveMode.Read))
            {
                foreach (var entry in archive.Entries)
                {
                    if (entry.Name.ToLower().Contains(".zip"))
                    {
                        MemoryStream nestedArchiveStream = new MemoryStream();

                        entry.Open().CopyTo(nestedArchiveStream);
                        
                        using (var nestedArchive = new ZipArchive(nestedArchiveStream))
                        {
                            var datFile = nestedArchive.Entries[0];

                            StreamReader reader = new StreamReader(datFile.ToString());
                            string strAllFile = reader.ReadToEnd();
                        }
                    }
                }
            }
            return Ok();
        }
        catch (Exception ex)
        {
            return BadRequest(ex.Message);
        }
    }

错误:找不到文件“D:\project'spath\WPNN788_4_11-15-22_084023.dat”。

【问题讨论】:

  • 您正在尝试从请求的网络流中读取,而不是实际文件。你不能在网络流中来回。在解压缩之前,您必须将文件复制到磁盘。

标签: c# asp.net-core-6.0 c#-ziparchive


【解决方案1】:

只是因为datFile.ToString()返回的是相对路径。

但是,StreamReader 的构造函数需要完整路径

并且错误表明:如果将相对路径传递给构造函数,它将像这样处理路径:

var fullpath = Path.Combine(System.Environment.CurrentDirectory, relativepath);

您可以尝试将流而不是路径传递给构造函数:

StreamReader reader = new StreamReader(datFile.Open());

我调试了结果:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-23
    相关资源
    最近更新 更多