zoukankan      html  css  js  c++  java
  • 5文件操作

    本篇博客对应视频讲解

    文件系统

    不管是什么操作系统,文件系统都是基本的组成部分。 通过目录和文件,我们可以组织、存储和查找我们的文件,不同的文件类型,我们可以通过不同的软件进行读写操作。 可以说,我们使用计算机,相当一部分时间都是在处理不同的文件。文件系统是表示计算机存储设备(内存和磁盘)内容的抽象概念。 以文件的形式呈现给人类。

    我们将满足特定数据格式的存储到磁盘。文件系统会通过文件路径和名称来维护这些存储内容。 所以,我们进行文件操作,实质上就是对不同编码的字符串进行操作。在多数时候,为了避免在编码问题上花费时间,我们通常会使用UTF-8格式。

    只要我们能够知道文件是以什么编码方式存储的,我们就可用这种规则去读取和编辑。

    文件操作

    关于文件操作及I/O流较完整的内容,请务必浏览 官方文档:文件和流 I/O

    下面我们将通过一个实例来讲解文件相关的操作。

    实际场景:

    今天我使用手机拍了很多照片,现在我想把这些照片进行压缩生成新的图片,按照一定的规则命名存储起来。 我们将处理结果输出到一个文本文件。

    分析:

    • 首先我们要明确的是,我们是需要对多个文件进行操作,这样才值得我们自己写程序去实现。如果只是一张的话,我们通过软件操作就可以了。所以这里需要解决第一个问题就是 获取某个目录下所有图片的信息

    • 通过相机拍摄的照片通常都很大,所以,我们要将这些照片压缩。 这里就是第二个问题 如何压缩图片。 由于.net core还没有对System.Drawing有很好的支持。这里我们使用第三方类库ImageSharp来实现该功能。也是利用.net 开源生态的力量。

    • 压缩之后,我们要将新的图片以特定的命名方式存储。那么第三个问题就是 如何将一个图片指定名称存储到指定位置

    • 存储完之后,我们要将处理记录输出到文件。这是最后一步 输出内容到文件

    根据以上的思路,我们来实现代码:

               //1 获取目录下所有文件信息
                var dirs = new DirectoryInfo(@"e:\images");//原目录
                var outDirs = Directory.CreateDirectory(@"e:\images\output");//输出目录
                var files = dirs.GetFiles("*.*");
    
                var outputInfo = "";//记录转化内容
    
                //2 遍历文件,压缩转化输出 
                int i = 1;
                foreach (var file in files)
                {
                    //读入图片文件
                    using (var img = Image.Load(file.FullName))
                    {
                        //设置输出选项
                        Configuration.Default.SetEncoder(ImageFormats.Jpeg, new JpegEncoder()
                        {
                            Quality = 85,
                            IgnoreMetadata = true,
                        });
                        var newImg = img.Clone(ctx => ctx.Resize(new ResizeOptions
                        {
                            Size = new Size((int)(img.Width / 1.5), (int)(img.Height / 1.5)),
                            Mode = ResizeMode.BoxPad
                        }));
    
                        //构造新文件名称
                        var fileName = Path.Combine(outDirs.FullName, DateTime.Now.ToString("MMdd") + $"-myphotos{i}.jpg");
                        //保存副本到新文件
                        newImg.Save(fileName);
                        i++;
                        outputInfo += $"原文件:{file.FullName} => 新文件:{fileName}\r\n";
                        Console.WriteLine(outputInfo);
                    }
                }
                //生成操作记录
                File.WriteAllText(@"e:\images\output.txt", outputInfo);
                Console.WriteLine("完成任务");
    
  • 相关阅读:
    windows下 php-cgi.exe 0xc000007b 错误 阿星小栈
    call to undefined function openssl cipher iv length() 报错 PHP7开启OpenSSL扩展失败 阿星小栈
    PHP json_encode返回的json前端获取时出现unicode转码和反斜杠导致无法解析的解决办法
    Warring:POST Content-Length of 625523488 bytes exceeds the limit of 8388608 bytes in Unknown on line 0 阿星小栈
    PHP数组分割成新数组 阿星小栈
    Laravel ajax请求419错误及解决办法(CSRF验证) 阿星小栈
    MySQL said: Authentication plugin 'caching_sha2_password' cannot be loaded... 阿星小栈
    Laravel框架发送邮件 阿星小栈
    PHP 导出Excel三种方式 阿星小栈
    mysql命令 出现ERROR 1054 (42S22): Unknown column 'password' in 'field list'
  • 原文地址:https://www.cnblogs.com/msdeveloper/p/9773797.html
Copyright © 2011-2022 走看看