Saturday, May 30, 2015

Moving Files To Disc


     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);
            }
        }