Exemple #1
0
 /// <summary>
 /// The entry point of the algorithm
 /// </summary>
 static public void Start()
 {
     //Initializing BaseOperations
     BaseOperations.Initlaize("AudiosInfo.txt", "readme.txt");
     //Iterate through files
     foreach (FileDescription file in BaseOperations.Files)
     {
         bool FoundFolder = false;
         //iterate through folders
         foreach (FolderDescription folder in BaseOperations.Folders)
         {
             //check the file duration if it fits in the folder
             if (folder.CheckLength(file.Duration))
             {
                 FoundFolder           = true;
                 folder.CurrentLength += file.Duration;
                 BaseOperations.MoveFile(file, folder);
                 break;
             }
         }
         //if there is no folder a new one will be created
         if (!FoundFolder)
         {
             FolderDescription folder = BaseOperations.ConstructFolder();
             if (!folder.CheckLength(file.Duration))
             {
                 throw new ArgumentOutOfRangeException("File size is larger than max folder size");
             }
             folder.CurrentLength += file.Duration;
             BaseOperations.MoveFile(file, folder);
         }
     }
 }
Exemple #2
0
        static public void BestFitFilling(string InputFolderpath, string OutputFolderpath)
        {
            BaseOperations.Initlaize("AudiosInfo.txt", "readme.txt");
            // creating output folder if not exist
            if (!Directory.Exists(OutputFolderpath))
            {
                DirectoryInfo di = Directory.CreateDirectory(OutputFolderpath);
            }
            //creating Bestfit folder if not exist
            string bestfitpath = OutputFolderpath + @"\[5] bestfit";

            if (!Directory.Exists(bestfitpath))
            {
                DirectoryInfo di2 = Directory.CreateDirectory(bestfitpath);
            }
            //creating files with the names in BFfolders if not exist
            for (int i = 0; i < BFfolders.Count; i++)
            {
                string foldercount = (i + 1).ToString();
                string folderpath  = bestfitpath + @"\F" + foldercount;
                if (!Directory.Exists(folderpath))
                {
                    DirectoryInfo di3 = Directory.CreateDirectory(folderpath);
                }
                string folderMetaData   = bestfitpath + @"\F" + foldercount + "_METADATA.txt";
                System.IO.FileStream F1 = new FileStream(folderMetaData, FileMode.Create);
                StreamWriter         w1 = new StreamWriter(F1);
                w1.WriteLine("F" + foldercount);

                for (int j = 0; j < BFfolders[i].FolderAudios.Count; j++)
                {
                    string filepath   = InputFolderpath + BFfolders[i].FolderAudios[j].name;
                    string filetarget = folderpath + @"\" + BFfolders[i].FolderAudios[j].name;
                    System.IO.File.Copy(filepath, filetarget, true);

                    w1.WriteLine(BFfolders[i].FolderAudios[j].name + " " + BFfolders[i].FolderAudios[j].hours + ":" + BFfolders[i].FolderAudios[j].min + ":" + BFfolders[i].FolderAudios[j].sec);
                }
                w1.WriteLine(BFfolders[i].hours + ":" + BFfolders[i].min + ":" + BFfolders[i].sec);
                w1.Close();
            }
        }
        static void Main(string[] args)
        {
            //BaseOperations.Initlaize("AudiosInfo.txt", "readme.txt");
            // BaseOperations.SortInDecreasing();
            // FittingOperations.worst_fit(@"c:\Audios", @"c:\Output\[4] folderfilling");
            //FittingOperations.filling.write(@"c:\Audios", @"c:\Output\[4] folderfilling");
            BaseOperations.Initlaize("AudiosInfo.txt", "readme.txt");

            FittingOperations.BestFit.Best_fit();


            //set the source (input-audios folder) in the same way here
            string input = @"C:\Users\pc\Downloads\Project\sample test\sample 1\INPUT\Audios\";
            //set the destination(output folder)in the same way here
            string output = @"C:\Users\pc\Downloads\Project\sample test\sample 1\output\";



            FittingOperations.BestFit.BestFitFilling(input, output);
            ///Just more
            ///
            ///
        }
Exemple #4
0
        public static void write(string Source, string Destination)
        {
            BaseOperations.Initlaize("AudiosInfo.txt", "readme.txt");
            for (int i = 0; i < 200; i++)
            {
                for (int j = 0; j < 800; j++)
                {
                    dp[i, j] = -2;
                }
            }
            string path = Destination;

            if (!Directory.Exists(path))
            {
                DirectoryInfo di = Directory.CreateDirectory(path);
            }
            int    k           = 1;
            string FileName    = path;
            string source      = Source;
            string destination = "";
            int    no          = 0;
            int    h           = 0;

            while (BaseOperations.num_of_rec != 0)
            {
                int i = 0;
                path        = Destination;
                source      = Source;
                destination = "";
                FileName    = path;
                DirectoryInfo di;
                fill(0);
                no = ans.Count;
                for (int r = 0; r < 200; r++)

                {
                    for (int j = 0; j < 800; j++)
                    {
                        dp[i, j] = -2;
                    }
                }
                if (no == 1)
                {
                    for (int num = 0; num < BaseOperations.Audio_files.Count; num++)
                    {
                        path        = Destination;
                        FileName    = path;
                        source      = Source;
                        path       += @"\f" + k;
                        di          = Directory.CreateDirectory(path);
                        source     += @"\" + (BaseOperations.Audio_files[num].index) + ".mp3";
                        destination = path + @"\" + (BaseOperations.Audio_files[num].index) + ".mp3";
                        System.IO.File.Copy(source, destination);
                        Console.WriteLine(source + "  " + destination);
                        FileName += @"\f" + k + "_MetaData.txt";
                        System.IO.FileStream F1 = new FileStream(FileName, FileMode.Create);
                        StreamWriter         w1 = new StreamWriter(F1);
                        w1.WriteLine("f" + k);
                        w1.WriteLine(BaseOperations.Audio_files[num].name + " " + BaseOperations.Audio_files[num].hours + ":" + BaseOperations.Audio_files[num].min + ":" + BaseOperations.Audio_files[num].sec);
                        w1.WriteLine(BaseOperations.Audio_files[num].hours + ":" + BaseOperations.Audio_files[num].min + ":" + BaseOperations.Audio_files[num].sec);
                        w1.Close();
                        k++;
                        i++;
                    }
                    return;
                }
                path += @"\f" + k;
                di    = Directory.CreateDirectory(path);
                int w3 = 0;
                for (; i < no; i++)
                {
                    source      = Source;
                    source     += @"\" + (ans[w3].index) + ".mp3";
                    destination = path + @"\" + (ans[w3].index) + ".mp3";
                    System.IO.File.Copy(source, destination);
                    w3++;
                }
                FileName += @"\f" + k + "_MetaData.txt";
                System.IO.FileStream F = new FileStream(FileName, FileMode.Create);
                StreamWriter         w = new StreamWriter(F);
                w.WriteLine("f" + k);
                Audios tem = new Audios();
                for (int j = 0; j < no; j++)
                {
                    w.WriteLine(ans[j].name + " " + ans[j].hours + ":" + ans[j].min + ":" + ans[j].sec);
                    tem.hours += ans[j].hours;
                    tem.min   += ans[j].min;
                    tem.sec   += ans[j].sec;
                }
                w.WriteLine(tem.hours + ":" + tem.min + ":" + tem.sec);
                k++;
                w.Close();
                int var = 0;
                for (int it = 0; it < no; it++)
                {
                    var = ans[it].index - 1 - h;
                    if (var < 0)
                    {
                        var = 0;
                    }
                    BaseOperations.Audio_files.RemoveAt(var);
                    h++;
                }

                BaseOperations.num_of_rec -= no;
                ans.Clear();
                count    = 0;
                MaxCount = 0;
            }
        }
Exemple #5
0
    static public void First_fit(string Source, string Destination)
    {
        BaseOperations.Initlaize("AudiosInfo.txt", "readme.txt");
        BaseOperations.SortInDecreasing();
        string path = Destination;

        if (!Directory.Exists(path))
        {
            DirectoryInfo di = Directory.CreateDirectory(path);
        }
        int    k           = 1;
        string FileName    = path;
        string source      = Source;
        string destination = "";

        for (int i = 0; i < BaseOperations.num_of_rec; i++)
        {
            path        = Destination;
            source      = Source;
            destination = "";
            FileName    = path;
            int    directoryCount = System.IO.Directory.GetDirectories(path).Length;
            long   max            = 0;
            int    index          = 0;
            bool   test           = true;
            Folder Temp_folder    = new Folder();
            if (directoryCount == 0)
            {
                path += @"\f" + k;
                DirectoryInfo di = Directory.CreateDirectory(path);
                Temp_folder.hours       = BaseOperations.Audio_files[i].hours;
                Temp_folder.min         = BaseOperations.Audio_files[i].min;
                Temp_folder.sec         = BaseOperations.Audio_files[i].sec;
                Temp_folder.free_space  = BaseOperations.max_size;
                Temp_folder.free_space -= BaseOperations.Audio_files[i].total_in_sec;
                BaseOperations.Audio_Folders.Add(Temp_folder);
                source     += @"\" + (BaseOperations.Audio_files[i].index) + ".mp3";
                destination = path + @"\" + (BaseOperations.Audio_files[i].index) + ".mp3";
                System.IO.File.Move(source, destination);
                FileName += @"\f" + k + "_MetaData.txt";
                System.IO.FileStream F = new FileStream(FileName, FileMode.Create);
                StreamWriter         w = new StreamWriter(F);
                w.WriteLine("f" + k);
                w.WriteLine(BaseOperations.Audio_files[i].name + " " + BaseOperations.Audio_files[i].hours + ":" + BaseOperations.Audio_files[i].min + ":" + BaseOperations.Audio_files[i].sec);
                w.Close();
                k++;
            }
            else
            {
                for (int j = 0; j < directoryCount; j++)
                {
                    if (BaseOperations.Audio_Folders[j].free_space >= BaseOperations.Audio_files[i].total_in_sec)
                    {
                        BaseOperations.Audio_Folders[j].hours      += BaseOperations.Audio_files[i].hours;
                        BaseOperations.Audio_Folders[j].min        += BaseOperations.Audio_files[i].min;
                        BaseOperations.Audio_Folders[j].sec        += BaseOperations.Audio_files[i].sec;
                        BaseOperations.Audio_Folders[j].free_space -= BaseOperations.Audio_files[i].total_in_sec;
                        path       += @"\f" + (j + 1);
                        source     += @"\" + (BaseOperations.Audio_files[i].index) + ".mp3";
                        destination = path + @"\" + (BaseOperations.Audio_files[i].index) + ".mp3";
                        System.IO.File.Move(source, destination);
                        FileName += @"\f" + (j + 1) + "_MetaData.txt";
                        System.IO.FileStream F = new FileStream(FileName, FileMode.Append);
                        StreamWriter         w = new StreamWriter(F);
                        w.WriteLine(BaseOperations.Audio_files[i].name + " " + BaseOperations.Audio_files[i].hours + ":" + BaseOperations.Audio_files[i].min + ":" + BaseOperations.Audio_files[i].sec);
                        w.Close();
                        test = false;
                        break;
                    }
                }
                if (test)
                {
                    path        = Destination;
                    source      = Source;
                    destination = "";
                    FileName    = path;
                    path       += @"\f" + k;
                    DirectoryInfo di = Directory.CreateDirectory(path);
                    Temp_folder.hours       = BaseOperations.Audio_files[i].hours;
                    Temp_folder.min         = BaseOperations.Audio_files[i].min;
                    Temp_folder.sec         = BaseOperations.Audio_files[i].sec;
                    Temp_folder.free_space  = BaseOperations.max_size;
                    Temp_folder.free_space -= BaseOperations.Audio_files[i].total_in_sec;
                    BaseOperations.Audio_Folders.Add(Temp_folder);
                    source     += @"\" + (BaseOperations.Audio_files[i].index) + ".mp3";
                    destination = path + @"\" + (BaseOperations.Audio_files[i].index) + ".mp3";
                    System.IO.File.Move(source, destination);
                    FileName += @"\f" + k + "_MetaData" + ".txt";
                    System.IO.FileStream F = new FileStream(FileName, FileMode.Create);
                    StreamWriter         w = new StreamWriter(F);
                    w.WriteLine("f" + k);
                    w.WriteLine(BaseOperations.Audio_files[i].name + " " + BaseOperations.Audio_files[i].hours + ":" + BaseOperations.Audio_files[i].min + ":" + BaseOperations.Audio_files[i].sec);
                    w.Close();
                    k++;
                }
            }
        }
        int no = 0;

        FileName = Destination + @"\f" + (no + 1) + "_MetaData.txt";
        for (; no < k - 1; no++)
        {
            FileName = @"c:\Output\[1] FirstfitDecreasing\f" + (no + 1) + "_MetaData.txt";
            System.IO.FileStream F = new FileStream(FileName, FileMode.Append);
            StreamWriter         w = new StreamWriter(F);
            w.WriteLine(BaseOperations.Audio_Folders[no].hours + ":" + BaseOperations.Audio_Folders[no].min + ":" + BaseOperations.Audio_Folders[no].sec);
            w.Close();
        }
    }
    /// <summary>
    /// The Complixty of Frist Fit is  O(N^2)
    /// </summary>

    static public void First_fit(string Source, string Destination)
    {
        /// Initlaize the Prameters
        BaseOperations.Initlaize("AudiosInfo.txt", "readme.txt");
        /// Sorting the Files
        BaseOperations.SortInDecreasing();  //O(NlogN)
        string path = Destination;

        // Adding the Frist file
        if (!Directory.Exists(path))
        {
            DirectoryInfo di = Directory.CreateDirectory(path);
        }
        int    k           = 1;
        string FileName    = path;
        string source      = Source;
        string destination = "";

        for (int i = 0; i < BaseOperations.num_of_rec; i++) //O(N)
        {
            path        = Destination;
            source      = Source;
            destination = "";
            FileName    = path;
            int    directoryCount = System.IO.Directory.GetDirectories(path).Length;
            long   max            = 0;
            int    index          = 0;
            bool   test           = true;
            Folder Temp_folder    = new Folder();
            if (directoryCount == 0)
            {
                /// Creating the Frist folder
                path += @"\f" + k;
                DirectoryInfo di = Directory.CreateDirectory(path);

                Temp_folder.hours       = BaseOperations.Audio_files[i].hours;
                Temp_folder.min         = BaseOperations.Audio_files[i].min;
                Temp_folder.sec         = BaseOperations.Audio_files[i].sec;
                Temp_folder.free_space  = BaseOperations.max_size;
                Temp_folder.free_space -= BaseOperations.Audio_files[i].total_in_sec;
                // Satr el Folder El 5ayaly
                BaseOperations.Audio_Folders.Add(Temp_folder);
                // Real Transfering
                source     += @"\" + (BaseOperations.Audio_files[i].index) + ".AMR";
                destination = path + @"\" + (BaseOperations.Audio_files[i].index) + ".AMR";
                // Copy mn El 5yaly to Real Folder
                System.IO.File.Copy(source, destination);
                /// Adding Data to Meta Data  Files
                FileName += @"\f" + k + "_MetaData.txt";
                System.IO.FileStream F = new FileStream(FileName, FileMode.Create);
                StreamWriter         w = new StreamWriter(F);
                w.WriteLine("f" + k);
                w.WriteLine(BaseOperations.Audio_files[i].name + " " + BaseOperations.Audio_files[i].hours + ":" + BaseOperations.Audio_files[i].min + ":" + BaseOperations.Audio_files[i].sec);
                w.Close();
                k++;
            }
            else
            {
                for (int j = 0; j < directoryCount; j++)  //O(N^2)
                {
                    if (BaseOperations.Audio_Folders[j].free_space >= BaseOperations.Audio_files[i].total_in_sec)
                    {
                        // Zy Ely Foo2
                        BaseOperations.Audio_Folders[j].hours      += BaseOperations.Audio_files[i].hours;
                        BaseOperations.Audio_Folders[j].min        += BaseOperations.Audio_files[i].min;
                        BaseOperations.Audio_Folders[j].sec        += BaseOperations.Audio_files[i].sec;
                        BaseOperations.Audio_Folders[j].free_space -= BaseOperations.Audio_files[i].total_in_sec;
                        path       += @"\f" + (j + 1);
                        source     += @"\" + (BaseOperations.Audio_files[i].index) + ".AMR";
                        destination = path + @"\" + (BaseOperations.Audio_files[i].index) + ".AMR";
                        System.IO.File.Copy(source, destination);
                        FileName += @"\f" + (j + 1) + "_MetaData.txt";
                        // Adding THe Remaning files in Folder
                        System.IO.FileStream F = new FileStream(FileName, FileMode.Append);
                        StreamWriter         w = new StreamWriter(F);
                        w.WriteLine(BaseOperations.Audio_files[i].name + " " + BaseOperations.Audio_files[i].hours + ":" + BaseOperations.Audio_files[i].min + ":" + BaseOperations.Audio_files[i].sec);
                        w.Close();
                        test = false;
                        break;
                    }
                }
                if (test)
                {
                    // Adding in A new Folder w Zy El Frist Condition
                    path        = Destination;
                    source      = Source;
                    destination = "";
                    FileName    = path;
                    path       += @"\f" + k;
                    DirectoryInfo di = Directory.CreateDirectory(path);
                    Temp_folder.hours       = BaseOperations.Audio_files[i].hours;
                    Temp_folder.min         = BaseOperations.Audio_files[i].min;
                    Temp_folder.sec         = BaseOperations.Audio_files[i].sec;
                    Temp_folder.free_space  = BaseOperations.max_size;
                    Temp_folder.free_space -= BaseOperations.Audio_files[i].total_in_sec;
                    BaseOperations.Audio_Folders.Add(Temp_folder);
                    source     += @"\" + (BaseOperations.Audio_files[i].index) + ".AMR";
                    destination = path + @"\" + (BaseOperations.Audio_files[i].index) + ".AMR";
                    System.IO.File.Copy(source, destination);
                    FileName += @"\f" + k + "_MetaData" + ".txt";
                    System.IO.FileStream F = new FileStream(FileName, FileMode.Create);
                    StreamWriter         w = new StreamWriter(F);
                    w.WriteLine("f" + k);
                    w.WriteLine(BaseOperations.Audio_files[i].name + " " + BaseOperations.Audio_files[i].hours + ":" + BaseOperations.Audio_files[i].min + ":" + BaseOperations.Audio_files[i].sec);
                    w.Close();
                    k++;
                }
            }
        }
        int no = 0;

        FileName = Destination + @"\f" + (no + 1) + "_MetaData.txt";
        for (; no < k - 1; no++) //O(N)
        {
            FileName = @"c:\Output\[1] FirstfitDecreasing\f" + (no + 1) + "_MetaData.txt";
            System.IO.FileStream F = new FileStream(FileName, FileMode.Append);
            StreamWriter         w = new StreamWriter(F);
            w.WriteLine(BaseOperations.Audio_Folders[no].hours + ":" + BaseOperations.Audio_Folders[no].min + ":" + BaseOperations.Audio_Folders[no].sec);
            w.Close();
        }
    }
    /// <summary>
    /// The Avarge Complixty for worst_fit Priorty Queue Is O(NlogN)
    /// </summary>
    /// <param name="Source">Source of Data</param>
    /// <param name="Destination"> Destination of Data</param>
    static public void worst_fitp(string Source, string Destination)
    {
        // Initlaize The Prameters
        BaseOperations.Initlaize("AudiosInfo.txt", "readme.txt"); // O(N)
        PriorityQueue <Folder> PQ = new PriorityQueue <Folder>();
        string path = Destination;

        if (!Directory.Exists(path))
        {
            DirectoryInfo di = Directory.CreateDirectory(path);
        }
        int    k           = 1;
        string FileName    = path;
        string source      = Source;
        string destination = "";

        for (int i = 0; i < BaseOperations.num_of_rec; i++) // O(N)
        {
            path        = Destination;
            source      = Source;
            destination = "";
            FileName    = path;
            int directoryCount = System.IO.Directory.GetDirectories(path).Length;
            //long max = 0;
            int index = 0;
            //bool test = false;
            Folder Temp_folder = new Folder();
            if (directoryCount == 0)
            {
                // Adding The Frist Folder
                path += @"\f" + k;
                DirectoryInfo di = Directory.CreateDirectory(path);
                Temp_folder.hours       = BaseOperations.Audio_files[i].hours;
                Temp_folder.min         = BaseOperations.Audio_files[i].min;
                Temp_folder.sec         = BaseOperations.Audio_files[i].sec;
                Temp_folder.free_space  = BaseOperations.max_size;
                Temp_folder.free_space -= BaseOperations.Audio_files[i].total_in_sec;
                Temp_folder.index       = k;
                BaseOperations.Audio_Folders.Add(Temp_folder);
                PQ.Enqueue(Temp_folder);
                source     += @"\" + (BaseOperations.Audio_files[i].index) + ".AMR";
                destination = path + @"\" + (BaseOperations.Audio_files[i].index) + ".AMR";
                System.IO.File.Copy(source, destination);
                FileName += @"\f" + k + "_MetaData.txt";
                System.IO.FileStream F = new FileStream(FileName, FileMode.Create);
                StreamWriter         w = new StreamWriter(F);
                w.WriteLine("f" + k);
                w.WriteLine(BaseOperations.Audio_files[i].name + " " + BaseOperations.Audio_files[i].hours + ":" + BaseOperations.Audio_files[i].min + ":" + BaseOperations.Audio_files[i].sec);
                w.Close();
                k++;
                index++;
            }
            else
            {
                if (PQ.Peek().free_space >= BaseOperations.Audio_files[i].total_in_sec) // O(n)
                {
                    Folder temp = new Folder();
                    temp = PQ.Peek();
                    PQ.Dequeue(); // O(1)
                    temp.hours      += BaseOperations.Audio_files[i].hours;
                    temp.min        += BaseOperations.Audio_files[i].min;
                    temp.sec        += BaseOperations.Audio_files[i].sec;
                    temp.free_space -= BaseOperations.Audio_files[i].total_in_sec;
                    if (temp.free_space != 0)
                    {
                        PQ.Enqueue(temp); // O(nlogn)
                    }
                    // test = true;

                    path       += @"\f" + temp.index;
                    source     += @"\" + (BaseOperations.Audio_files[i].index) + ".AMR";
                    destination = path + @"\" + (BaseOperations.Audio_files[i].index) + ".AMR";
                    System.IO.File.Copy(source, destination);
                    FileName += @"\f" + temp.index + "_MetaData.txt";
                    System.IO.FileStream F = new FileStream(FileName, FileMode.Append);
                    StreamWriter         w = new StreamWriter(F);
                    w.WriteLine(BaseOperations.Audio_files[i].name + " " + BaseOperations.Audio_files[i].hours + ":" + BaseOperations.Audio_files[i].min + ":" + BaseOperations.Audio_files[i].sec);
                    w.Close();
                }
                else
                {
                    path += @"\f" + k;
                    DirectoryInfo di = Directory.CreateDirectory(path);
                    Temp_folder.index       = k;
                    Temp_folder.hours       = BaseOperations.Audio_files[i].hours;
                    Temp_folder.min         = BaseOperations.Audio_files[i].min;
                    Temp_folder.sec         = BaseOperations.Audio_files[i].sec;
                    Temp_folder.free_space  = BaseOperations.max_size;
                    Temp_folder.free_space -= BaseOperations.Audio_files[i].total_in_sec;
                    BaseOperations.Audio_Folders.Add(Temp_folder);
                    PQ.Enqueue(Temp_folder);
                    source     += @"\" + (BaseOperations.Audio_files[i].index) + ".AMR";
                    destination = path + @"\" + (BaseOperations.Audio_files[i].index) + ".AMR";
                    System.IO.File.Copy(source, destination);
                    FileName += @"\f" + k + "_MetaData" + ".txt";
                    System.IO.FileStream F = new FileStream(FileName, FileMode.Create);
                    StreamWriter         w = new StreamWriter(F);
                    w.WriteLine("f" + k);
                    w.WriteLine(BaseOperations.Audio_files[i].name + " " + BaseOperations.Audio_files[i].hours + ":" + BaseOperations.Audio_files[i].min + ":" + BaseOperations.Audio_files[i].sec);
                    w.Close();
                    k++;
                }
            }
        }
        int no = 0;

        FileName = Destination + @"\f" + (no + 1) + "_MetaData.txt";
        for (; no < k - 1; no++) // O(n)
        {
            FileName = @"c:\Output\[1] FirstfitDecreasing\f" + (no + 1) + "_MetaData.txt";
            System.IO.FileStream F = new FileStream(FileName, FileMode.Append);
            StreamWriter         w = new StreamWriter(F);
            w.WriteLine(BaseOperations.Audio_Folders[no].hours + ":" + BaseOperations.Audio_Folders[no].min + ":" + BaseOperations.Audio_Folders[no].sec);
            w.Close();
        }
    }