• 程序员的1111


    又是一年一度的双11,购物的购物,约会的约会,秀恩爱的秀恩爱,单身汪自然不属于这三者。想想,没什么好买的。约会,秀恩爱那种更没了。前几年说,希望明年光棍节前可以脱单,结果到现在还是一个人过。诶,说多了都是泪。但是,人总是要有梦想的,希望明年光棍节前可以摆脱单身的状况。

    ”未将对象引用设置到对象的实例“

    image

    这种情况,大家都遇到过,通俗一点就是”找不到对象“,程序员经常跟”对象“打交道,却总是找不到对象,只能用new一个”对象“来自嘲了。

    image

    像是这种情况,更是给人10000点伤害,连Excel都嘲笑你找不到对象,还能不能让人愉快的工作了。

    既然这样,在这个日子,自娱自乐自嘲一番,想必是极好的,于是就有了下面这个

    image

    虽然不知道该叫什么,应下景的话,那暂且叫它”my1111“

    如何实现的呢,原理就是往磁盘塞一定量数据。一定量数据=目前磁盘可用空间-最后剩余可用空间

    代码比较简单,直接贴出来

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    
    namespace DiskFiller
    {
        class Program
        {
            static void Main(string[] args)
            {
                ShowDrives();//显示每个盘的信息
                List<FillingDrive> userInputFillingDrive = CollectUserInput();//获取输入的每个盘和要设置的可用空间
                Console.WriteLine("填充中");
                List<string> filledFilePathList = FillDataToDrive(userInputFillingDrive);//往磁盘填充数据
                Console.WriteLine("填充完成");
                Console.WriteLine("是否删除填充的数据(输入y表示删除):");
                if (Console.ReadLine().ToLower() == "y")
                {
                    DeleteUselessData(filledFilePathList); //删除填充的数据
                }
            }
    
            /// <summary>
            /// 显示每个盘的信息
            /// </summary>
            public static void ShowDrives()
            {
                IEnumerable<DriveInfo> fixedDiskDrives = GetFixedDiskDrives();
                foreach (var drive in fixedDiskDrives)
                {
                    Console.WriteLine("盘符:" + drive.Name + "  可用空间:" + (drive.TotalFreeSpace >> 20).ToString() + "MB");
                }
            }
    
            /// <summary>
            /// 获取输入的每个盘和要设置的可用空间
            /// </summary>
            /// <returns></returns>
            public static List<FillingDrive> CollectUserInput()
            {
                List<FillingDrive> fillingDriveList = new List<FillingDrive>();
                Console.WriteLine("输入的格式为  盘符,设置的可用空间  
    例如: c,15    表示要设置C盘,并且设置C盘的最后可用空间是15MB ");
                while (true)
                {
                    Console.WriteLine("请输入,输入quit结束输入:");
                    string input = Console.ReadLine();
                    if (input.ToLower() == "quit")
                    {
                        break;
                    }
                    string[] inputArray = input.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
                    fillingDriveList.Add(new FillingDrive() //这里没判断输入的格式是否正确
                        {
                            DriveName = inputArray[0],
                            NewFreeSpace = Convert.ToInt64(inputArray[1]) << 20
                         }
                        );
                }
                return fillingDriveList;
            }
    
            /// <summary>
            /// 往磁盘填充数据
            /// </summary>
            /// <param name="fillingDrives"></param>
            /// <returns></returns>
            public static List<string> FillDataToDrive(List<FillingDrive> fillingDrives)
            {
                List<string> filledFilePathList = new List<string>();
                foreach (var item in fillingDrives)
                {
                    DriveInfo drive = new DriveInfo(item.DriveName);
                    string filledFileName = DateTime.Now.ToString("yyyyMMddHHmmssfffffff") + ".my1111";//填充数据的文件
                    string filledFilePath = Path.Combine(drive.RootDirectory.FullName, filledFileName);
                    using (FileStream fs = new FileStream(filledFilePath, FileMode.OpenOrCreate))
                    {
                        //减去4096是因为设置系统盘时,最后的结果总是多填充了4096字节,所以这里少填充4096字节
                        long fillingSpace = drive.TotalFreeSpace - item.NewFreeSpace -4096;
                        fs.SetLength(fillingSpace);
    
                    } 
                    filledFilePathList.Add(filledFilePath);
                }
                return filledFilePathList;
            }
    
            /// <summary>
            /// 删除填充的数据
            /// </summary>
            /// <param name="filledFilePathList"></param>
            public static void DeleteUselessData(List<string> filledFilePathList)
            {
                foreach (var path in filledFilePathList)
                {
                    File.Delete(path);
                }
            }
    
            /// <summary>
            /// 获取磁盘
            /// </summary>
            /// <returns></returns>
            internal static IEnumerable<DriveInfo> GetFixedDiskDrives()
            {
                DriveInfo[] totalDrives = DriveInfo.GetDrives();
                IEnumerable<DriveInfo> fixedDiskDrives = totalDrives.Where(p => p.DriveType == DriveType.Fixed);
                return fixedDiskDrives;
            }
    
            public class FillingDrive
            {
                /// <summary>
                /// 盘符
                /// </summary>
                public string DriveName { get; set; }
    
                /// <summary>
                /// 填充到指定大小
                /// </summary>
                public long NewFreeSpace { get; set; }
            }
        }
    }

    运行前,看下各盘的的情况,还需要给一个干净的运行环境,防止其他软件在磁盘生成数据文件,造成最后结果不准确。

    image

    执行

    image

    输入各盘最后可用空间,输入quit结束输入

    image

    按回车,看到“填充完成”表示已经填完了

    image

    接下来,看下各盘的情况

    image

    可以看到各盘可用空间是输入的剩余可用空间大小

    各盘生成了一个后缀名为“my1111”的文件,比如,这里的E盘

    image

    看完结果后,输入”y”删除填充的文件,可以看到空间又回来了,如果输入了其它,程序会退出,填充的文件只能手动删,

    删除后缀是“my1111”的文件就可以了。

    image

    最后,祝各位1111快乐。

  • 相关阅读:
    解决shiro多次从redis读取session的问题
    软件测试其他方法
    异常HTTP Status 500
    支付
    java面试
    SQL入门
    软件测试理论基础
    软件测试学习第一章
    Linux在终端命令行模式下智能补全功能以及组合键
    Linux安装
  • 原文地址:https://www.cnblogs.com/dandzm/p/4956810.html
Copyright © 2020-2023  润新知