又是一年一度的雙11,購物的購物,約會的約會,秀恩愛的秀恩愛,單身汪自然不屬於這三者。想想,沒什麼好買的。約會,秀恩愛那種更沒了。前幾年說,希望明年光棍節前可以脫單,結果到現在還是一個人過。诶,說多了都是淚。但是,人總是要有夢想的,希望明年光棍節前可以擺脫單身的狀況。
”未將對象引用設置到對象的實例“
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("輸入的格式為 盤符,設置的可用空間 \n例如: 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; }
}
}
}
運行前,看下各盤的的情況,還需要給一個干淨的運行環境,防止其他軟件在磁盤生成數據文件,造成最後結果不准確。
最後,祝各位1111快樂。