This project is done for log files which make crowd to move when they fill the space of disc.Did
this project while working as intern.
They complained about logs which filled the
disc space and crash the system.This project which i did, automatially sorted
logs by creation date. Then they fill them in files and zipped. Then move this
zipped files to desired location.Thanks to this, you never lost log files, and
can reach any of them by looking creation time.
Also you can specify source and
target disc name, and amount of files which will move. Developed with C# Windows Desktop .
In Visual Studio when you want to pass parameters to application from outside you can right click the project and add General -> Settings File.
|
Add Settings File
|
After adding Settings File, enter parameter which use in projects.
SourceFolder: Location of Moving File from it
TargetFolder: Location of Moving File to it
WarningAmountOfFileSize: how much disc size fill the disch and trigger to move
AmountOfPercentForMovingFull : Amount of percent of files which will move
In Type specify the type of variables and for Scope choose the Application.
In Program.cs in Main method you can reach the parameter:
string directoryName = Settings.Default.TargetFolder;
In main method specify below.
public static void Main(string[] args)
{
Program myProgram= new Program();
//prevent multiple instance of C# application
if (Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName).Length > 1)
{
Console.WriteLine("Only one instance allowed");
Environment.Exit(0);
}
else
{
/*create target directory to store log files*/
DateTime dailyDate = DateTime.Now;
String directoryTargetName = myProgram.GetTargetDirectoryName(dailyDate);
int count = 0;
//listing all files in disk
string[] a1 = Directory.GetFiles(@Settings.Default.SourceFolder);
//get free disk space
string sourceDriverName = Settings.Default.SourceFolder.Split(new char[] { System.IO.Path.DirectorySeparatorChar }, StringSplitOptions.RemoveEmptyEntries).Last();
string targetDriverName = Settings.Default.TargetFolder.Split(new char[] { System.IO.Path.DirectorySeparatorChar }, StringSplitOptions.RemoveEmptyEntries).Last();
/*Specify Target Directory and check its availability*/
string _directoryNameS = Settings.Default.TargetFolder + "\\" + directoryTargetName;
myProgram.CheckExistDirectory(_directoryNameS);
Boolean bFlag= myProgram.ControlOfCapacitySourceAndTargetDisc(sourceDriverName,targetDriverName);
//Display all files
Console.WriteLine("-----Files -------");
foreach (string name in a1)
{
Console.WriteLine(name);
}
Console.WriteLine("----Sorted Array by creation date------");
//display sorting array
//sort file by creation date
IComparer fileComparer = new CompareFileByDate();
Array.Sort(a1, fileComparer);
foreach (string f in a1) // count file numbers
{
count++;
Console.WriteLine(f);
}
//Move directories to another disc
string destinationFile = @Settings.Default.TargetFolder; // destination disc
Console.WriteLine("**********************************************");
//calculate amount of moving from source to target disc
decimal AmountOfMoving = Convert.ToDecimal(count) * Settings.Default.AmountOfPercentForMovingFull;
int countSon = Convert.ToInt32(AmountOfMoving);
// control of target disc's free space
decimal division = myProgram.GetDivision(sourceDriverName); // get division
if (bFlag && division <= Settings.Default.WarningAmountOfFullSize) // what percent of disc is moving
{
Console.WriteLine("Warning,80 percent of disk is full");
Console.WriteLine("you must carry move files another free disk");
Console.WriteLine("%d of files are moving " + countSon);
foreach (string f in a1)
{
Console.WriteLine(f);
string lastDirectory = f.Split(new char[] { System.IO.Path.DirectorySeparatorChar }, StringSplitOptions.RemoveEmptyEntries).Last();
File.Move(f, _directoryNameS + "\\" + lastDirectory); // store in dateTime directory
countSon--;
if (countSon == 0)
{
break;
}
}
}
else
{
Console.WriteLine("You have enough space for saving files..");
}
}
}
//Check the existence of directory
public void CheckExistDirectory(String directoryName)
{
//check folder exists
if (Directory.Exists(directoryName))
{
Console.WriteLine("Warning !!! This directory is exists ..");
}
else
{
Console.WriteLine("Created Directory successfully ..");
Directory.CreateDirectory(directoryName);
}
}
/// Calculate Capacity of Discs
public Boolean ControlOfCapacitySourceAndTargetDisc(String sourceDriverName, String targetDriverName)
{
/*Calculate amount of logs in Source Driver*/
DriveInfo dS = new DriveInfo(sourceDriverName);
Console.WriteLine("Total size of Source Driver : " + dS.TotalSize);
Console.WriteLine("Total free size of Source Driver: " + dS.TotalFreeSpace);
decimal totalSizeS = dS.TotalSize;
decimal totalFreeSizeS = dS.TotalFreeSpace;
decimal amountOfUsing = totalSizeS - totalFreeSizeS;
Console.WriteLine("önceki gidecek kısım : " + amountOfUsing);
amountOfUsing = amountOfUsing * Settings.Default.AmountOfPercentForMovingFull; // taşınacak miktarın büyüklüğü
Console.WriteLine("tasinacak kısım : " + amountOfUsing);
/*Control of Target Driver Capacity*/
DriveInfo dD = new DriveInfo(targetDriverName);
Console.WriteLine("Total free space of Target Disc: " + dD.TotalFreeSpace);
decimal totalFreeSizeD = dD.TotalFreeSpace;
Console.WriteLine("gidecek kısım : " + amountOfUsing + "yer var var mı : " + totalFreeSizeD);
if (amountOfUsing <= totalFreeSizeD)
{
return true;
}
else
{
Console.WriteLine("Warninng !!! You do not have enough target space for moving ");
return false;
}
}
public class CompareFileByDate : IComparer
{
///
/// Metod açıklaması
///
/// param1
/// param2
///
public int Compare(Object a, Object b)
{
FileInfo fia = new FileInfo((string)a);
FileInfo fib = new FileInfo((string)b);
DateTime cta = fia.CreationTime;
DateTime ctb = fib.CreationTime;
return DateTime.Compare(cta, ctb);
}
}