using System;
using System.IO;
using System.Linq;
string dir = Console.ReadLine();
if (Directory.Exists(dir))
{
Console.WriteLine("Существует");
}
else
{
Console.WriteLine("Не существует");
}
Analize(dir);
static void Analize(string dir)
{
Dictionary<string, long> dict = new Dictionary<string, long>();
int fileCounter = 0;
int folderCounter = 0;
if (Directory.Exists(dir))
{
DirectoryInfo pat = new DirectoryInfo(dir);
Console.WriteLine($"Имя: {pat.Name} Путь: {pat.FullName}");
FileInfo[] fileInfos = pat.GetFiles();
for (int i = 0; i < fileInfos.Length; i++)
{
fileCounter++;
Console.WriteLine($"Имя файла: {fileInfos[i].Name} Размер: {Format(fileInfos[i].Length)}");
if (!dict.ContainsKey(fileInfos[i].Extension))
{
dict.Add(fileInfos[i].Extension, fileInfos[i].Length);
}
else
{
dict[fileInfos[i].Extension] += fileInfos[i].Length;
}
}
foreach (DirectoryInfo subDir in pat.GetDirectories())
{
folderCounter++;
Analize(subDir.FullName);
}
var biggest = fileInfos.OrderByDescending(f => f.Length).Take(3);
var oldFiles = fileInfos.Where(f => f.LastWriteTime < DateTime.Now.AddYears(-1)).OrderBy(f => f.LastWriteTime).Take(5);
Console.WriteLine($"Количество файлов: {fileCounter}");
Console.WriteLine($"Количество папок: {folderCounter + 1}");
Console.WriteLine($"Общий размер: {Format(pat.EnumerateFiles("*.*", SearchOption.AllDirectories).Sum(fi => fi.Length))}");
Console.WriteLine("Самые большие файлы:");
foreach (var file in biggest)
{
Console.WriteLine($"{file.Name} - {Format(file.Length)}");
}
Console.WriteLine("Старые файлы:");
foreach (var file in oldFiles)
{
Console.WriteLine($"{file.Name} - {file.LastWriteTime}");
}
var diskInfo = new DriveInfo(dir);
double freeSpacePercent = diskInfo.AvailableFreeSpace * 100.0 / diskInfo.TotalSize;
Console.WriteLine($"Свободное место на диске: {Math.Round(freeSpacePercent, 2)}%");
const double WarningThreshold = 10.0;
if (freeSpacePercent < WarningThreshold)
{
Console.WriteLine("Свободного места на диске меньше 10%");
}
using (var writer = new StreamWriter(@"C:\Users\CCU\Desktop\ConsoleApp67\audit-report.txt"))
{
writer.WriteLine($"Путь: {pat.FullName}");
writer.WriteLine($"Файлов: {fileCounter}");
writer.WriteLine($"Папок: {folderCounter + 1}");
writer.WriteLine($"Общий размер: {Format(pat.EnumerateFiles("*.*", SearchOption.AllDirectories).Sum(fi => fi.Length))}");
}
}
}
static string Format(long input)
{
if (input < 1024)
{
return $"{input} б";
}
if (input < 1024 * 1024)
{
return $"{input / 1024} КБ";
}
if (input < (1024 * 1024 * 1024))
{
return $"{input / 1024 / 1024} МБ";
}
else
{
return $"{input / 1024 / 1024 / 1024} ГБ";
}
}