Sunday 20 August 2017

Fast filing system

#include"iostream"
#include<conio.h>
#include"fstream"
using namespace std;

void MainMenu(char);

class File_System
{
    double SizeOfFileSystem,
        SizeOfFirstBlock,
        SizeOfFirstSubBlock,
        SizeOfSecondBlock,
        SizeOfSecondSubBlock,
        SizeOfThirdBlock,
        SizeOfThirdSubBlock;
    char Delimiter;
public:
    File_System()
    {
        Delimiter = '$';
        ofstream WFile("File System.txt",ios::_Noreplace);
            if( WFile.is_open())
            {
                system("CLS");
                cout<<"\n\n\t\t\tWelcom To File System \n\n\n";
                cout<<"\tEnter The Size Of File System In Bytes : ";
                cin>>SizeOfFileSystem;
                cout<<"\n\tEnter The Size Of First Block In Bytes : ";
                cin>>SizeOfFirstBlock ;
                while(SizeOfFirstBlock >= SizeOfFileSystem )
                {
                    cout<<"\n\t"<<SizeOfFirstBlock <<" Bytes Is Not A Valid Size For First Block \n\tPlease Enter Valid Size : ";
                    cin>>SizeOfFirstBlock ;
                }
                cout<<"\n\tEnter The Size Of First Sub Block In Bytes : ";
                cin>>SizeOfFirstSubBlock;
                while ( SizeOfFirstSubBlock >= SizeOfFirstBlock )
                {
                    cout<<"\n\t"<<SizeOfFirstSubBlock <<" Bytes Is Not A Valid Size For First Sub Block \n\tPlease Enter Valid Size : ";
                    cin>>SizeOfFirstSubBlock ;
                }
                cout<<"\n\tEnter The Size Of Second Block In Bytes : ";
                cin>>SizeOfSecondBlock;
                while(SizeOfSecondBlock  >= SizeOfFileSystem )
                {
                    cout<<"\n\t"<<SizeOfSecondBlock <<" Bytes Is Not A Valid Size For Second Block \n\tPlease Enter Valid Size : ";
                    cin>>SizeOfSecondBlock ;
                }
                cout<<"\n\tEnter The Size Of Second Sub Block In Bytes : ";
                cin>>SizeOfSecondSubBlock ;
                while ( SizeOfSecondSubBlock >= SizeOfSecondBlock )
                {
                    cout<<"\n\t"<<SizeOfSecondSubBlock <<" Bytes Is Not A Valid Size For Second  Sub Block \n\tPlease Enter Valid Size : ";
                    cin>>SizeOfSecondSubBlock ;
                }
                cout<<"\n\tEnter The Size Of Third Block In Bytes : ";
                cin>>SizeOfThirdBlock ;
                while(SizeOfThirdBlock >= SizeOfFileSystem )
                {
                    cout<<"\n\t"<<SizeOfThirdBlock  <<" Bytes Is Not A Valid Size For Third Block \n\tPlease Enter Valid Size : ";
                    cin>>SizeOfThirdBlock  ;
                }
                cout<<"\n\tEnter The Size Of Third Sub Block In Bytes : ";
                cin>>SizeOfThirdSubBlock;
                while ( SizeOfThirdSubBlock >= SizeOfThirdBlock)
                {
                    cout<<"\n\t"<<SizeOfThirdSubBlock <<" Bytes Is Not A Valid Size For Third Sub Block \n\tPlease Enter Valid Size : ";
                    cin>>SizeOfThirdSubBlock ;
                }

                system("CLS");
                cout<<"\n\n\t\t\tFeatures Of File System System \n\n\n";
                cout<<"\n\tSize of File System : "<<SizeOfFileSystem <<" Bytes";
                cout<<"\n\n\tSize of First Block : "<<SizeOfFirstBlock  <<" Bytes";
                cout<<"\n\tSize of First Sub Block : "<<SizeOfFirstSubBlock<<" Bytes";
                cout<<"\n\n\tSize of Second Block : "<<SizeOfSecondBlock <<" Bytes";
                cout<<"\n\tSize of Second Sub  Block : "<<SizeOfSecondSubBlock <<" Bytes";
                cout<<"\n\n\tSize of Third Block : "<<SizeOfThirdBlock <<" Bytes";
                cout<<"\n\tSize of Third Sub Block : "<<SizeOfThirdSubBlock <<" Bytes";
                cout<<"\n\nTo Create File System Press Any Key To Continue OR To Exit Press \"E\" ";
                char check = getch();
                if(check == 'E' || check ==  'e' )
                {
                    WFile.close();
                    remove("File System.txt");
                    MainMenu('7');
                }

                cout <<"\n\tFile System Is Being Created ..... ";
                for (double  i = 0; i < SizeOfFileSystem ; i++)
                {
                    if (i == SizeOfFirstBlock )
                    {
                        WFile.put(Delimiter);
                    }
                    else if (i>SizeOfFirstBlock && i < (SizeOfFirstBlock+SizeOfSecondBlock ))
                    {
                        double index =0,
                            block = 1;
                        while (block <= SizeOfThirdBlock / SizeOfThirdSubBlock )
                        {
                            WFile.seekp(i);
                            WFile<<(SizeOfFirstBlock + SizeOfSecondBlock + 1+ ( index * SizeOfThirdSubBlock ));
                            index ++;
                            i +=SizeOfSecondSubBlock ;
                            block ++;
                        }
                        i +=SizeOfSecondSubBlock ;
                        while (i<(SizeOfSecondBlock + SizeOfFirstBlock) )
                        {
                            i++;
                        }
                        WFile.seekp(i);
                        WFile.put(Delimiter);
                    }
                    else if (i == (SizeOfFirstBlock + SizeOfSecondBlock + SizeOfThirdBlock  -1))
                    {
                        WFile.put(Delimiter);
                    }
                    else
                    {
                        WFile.put(0);
                    }
                }
                ofstream infofile("File System.dll",ios::_Noreplace);
               
                infofile<<SizeOfFileSystem;
                infofile<<' ';
                infofile<<SizeOfFirstBlock;
                infofile<<' ';
                infofile<<SizeOfFirstSubBlock ;
                infofile<<' ';
                infofile<<SizeOfSecondBlock;
                infofile<<' ';
                infofile<<SizeOfSecondSubBlock ;
                infofile<<' ';
                infofile<<SizeOfThirdBlock;
                infofile<<' ';
                infofile<<SizeOfThirdSubBlock;
                infofile<<' ' ;


                infofile.close();
            }
            else
            {
                ifstream RFile("File System.dll",ios::in);
                if(RFile.is_open())
                {
                    RFile>>SizeOfFileSystem;
                    RFile>> SizeOfFirstBlock;
                    RFile>>SizeOfFirstSubBlock ;
                    RFile>>SizeOfSecondBlock ;
                    RFile>>SizeOfSecondSubBlock ;
                    RFile>>SizeOfThirdBlock ;
                    RFile>> SizeOfThirdSubBlock;
                }
                else
                {
                    cout<<"\n\n\tError In Loading File System ...... ";
                    getch();
                    exit(1);
                }
               
            }

    }
  ~ File_System ()
    {
    }
   

    void CreatNewFile();
    double GetEmptyBlockOfData();
    double GetEmptyBlockOfFileName(char []);
    void DeleletFile();
    void ViewAllFiles();
    void SearchFile();
    void CopyFileFromWindows();
    void CopyFileFromFileSystem();
    void EmptySpace();
    void Exit();
};
void File_System :: CreatNewFile ()
    {
        fstream RWfile("File System.txt");
        if(RWfile.is_open())
        {
            system("CLS");
            cout<<"\n\n\t\t\tWelcom To File Create Wizard \n\n\n";
           
            int SizeofFileName = SizeOfFirstSubBlock ;  // coversion double to int use for new operator
            char *NameofFile = new char[SizeofFileName];
            cout<<"\n\nTo Create File  Press Any Key To Continue OR To Return In Main Menu Press \"M\" ";
                char check = getch();
                if(check == 'M' || check ==  'm' )
                {
                    RWfile.close();
                    MainMenu('0');
                }
                NameofFile[0]=NULL;
                system("CLS");
                cout<<"\n\n\t\t\tWelcom To File Create Wizard \n\n\n";
                cout<<"\n\tPlease Enter Name Of File : ";
                cin.getline(NameofFile ,SizeofFileName );
                if(strlen(NameofFile)==0)
                {
                    cout<<"\n\tYou Have To Must Enter Name Of File ....\x01";
                    getch();
                    MainMenu('1');

                }
           
            int SizeofDataFile = 10485760;   // coversion double to int use for new operator
            char *DataOfFile = new char[SizeofDataFile ];
            cout<<"\n\tPlease Enter Data Of File : \n\n\tNOTE: At the End Of Data One Must Enter \'@\'  \n\t";
            //cin>>DataOfFile;
            cin.getline(DataOfFile,SizeofDataFile,'@');

            if (strlen(DataOfFile) > SizeOfThirdSubBlock  )
            {
                double EmptyBlockOfFileName=GetEmptyBlockOfFileName(NameofFile );
                RWfile.seekp(EmptyBlockOfFileName );
                double EmptyBlockOfData=GetEmptyBlockOfData();
                RWfile<<NameofFile<<' '<<EmptyBlockOfData;
                int SizeOfDataBlock = SizeOfThirdSubBlock;
                char *str= new char [SizeOfDataBlock];
                int size = strlen(DataOfFile);
                while (strlen(DataOfFile) > (SizeOfDataBlock - 50) )
                {
                    int i;
                    for(i = 0 ; i<(SizeOfDataBlock - 50) ; i++)
                        str[i]=DataOfFile[i];
                    str[i]=NULL;
                    int ii;
                    for(ii=0; ii<(strlen(DataOfFile) - (SizeOfDataBlock - 50) ); ii++)
                        DataOfFile[ii]=DataOfFile[ii + SizeOfDataBlock - 50];
                    DataOfFile[ii]=NULL;


                    RWfile.seekp(EmptyBlockOfData );
                    RWfile<<str;
                    RWfile<<Delimiter ;
                    double NextDataBlock = GetEmptyBlockOfData();
                    RWfile<<NextDataBlock;
                    EmptyBlockOfData = NextDataBlock ;
                }
               
                    RWfile.seekp(EmptyBlockOfData );
                    RWfile<<DataOfFile;
                    RWfile<<Delimiter ;
            }
            else
            {
                double EmptyBlockOfFileName=GetEmptyBlockOfFileName(NameofFile );
                RWfile.seekp(EmptyBlockOfFileName );
                double EmptyBlockOfData=GetEmptyBlockOfData();
                RWfile<<NameofFile<<' '<<EmptyBlockOfData;
                RWfile.seekp(EmptyBlockOfData );
                RWfile<<DataOfFile;
                RWfile<<Delimiter ;
            }
       
            RWfile.close();
            delete NameofFile,DataOfFile ;
           
        }

    }
double File_System :: GetEmptyBlockOfData()
{
    fstream RWfile("File System.txt");
        if(RWfile.is_open())
        {
            double EmptyBlock=NULL;
            for(int i=0 ;i<=(SizeOfThirdBlock / SizeOfThirdSubBlock  ) ; i++)
            {
                RWfile.seekp(SizeOfFirstBlock + 1 + ( i * SizeOfSecondSubBlock ));
                RWfile>>EmptyBlock;
               
                if(EmptyBlock)
                {
                    RWfile.seekp(SizeOfFirstBlock + 1 + ( i * SizeOfSecondSubBlock ));
                    int SizeOfEmptyBlockAdress = EmptyBlock; 
                    while (SizeOfEmptyBlockAdress) //for deletion of adress in second block after geting adress oF empty data block
                    {
                        RWfile<<NULL;
                        SizeOfEmptyBlockAdress /=10;
                    }
                   
                    return EmptyBlock;
                }   
            }
            RWfile.close();

            cout<<"\n\tThere Is Not Enough Space In File System To Create More File \n";
            getch();
            MainMenu('0');
        }
        else
        {
            cout<<"\n\tAn Error Occurred to Open the File System .....\x01\n\tTry Again Latter\n\n";
            cout<<"\n\nTo Try Again Press Any Key To Continue OR To Exit Press \"E\" ";
                char check = getch();
                if(check == 'E' || check ==  'e' )
                {
                    RWfile.close();
                    MainMenu('7');
                }
           
            MainMenu('0');
        }
}
double File_System :: GetEmptyBlockOfFileName(char NameOfFile[])
{
    fstream RWfile("File System.txt");
        if(RWfile.is_open())
        {
   
            for(int i=0; i<(SizeOfFirstBlock/SizeOfFirstSubBlock ) ; i++)
            {
                double block = (1 + ( i * SizeOfFirstSubBlock ));
                RWfile.seekg(block);
                char check;
                RWfile.get(check);
                if(check == NULL )
                {
                    return block;
                }
                int SizeofFileName = SizeOfFirstSubBlock ;   // convert double into int for new operator
                char *RenameCheck = new char[SizeofFileName];
                RWfile.seekg(block);
                RWfile>>RenameCheck;
                if( strcmp ( RenameCheck , NameOfFile) == 0 )
                {
                        cout<<"\n\tFile Of Same Name "<<NameOfFile <<" Is Already Exist In File System \n\tTry Any Other Name \x01 ";
                        cout<<"\n\n Press Any Key To Continue OR To Return In Main Menu \"M\" ";
                        char check = getch();
                        if(check == 'M' || check ==  'm' )
                        {
                                RWfile.close();
                                MainMenu('0');
                        }
                       
                        delete RenameCheck ;
                        MainMenu('1');
                }
               
            }
            RWfile.close();
            cout<<"\n\tThere Is Not Enough Space In File System To Create More File \n";
            cout<<"\n\nTo Try Again Press Any Key To Continue OR To Exit Press \"E\" ";
                char check = getch();
                if(check == 'E' || check ==  'e' )
                {
                    RWfile.close();
                    MainMenu('7');
                }
       
        }
        else
        {
            cout<<"\n\tAn Error Occurred to Open the File System .....\x01\n\tTry Again Latter\n\n";
            cout<<"\n\nTo Try Again Press Any Key To Continue OR To Exit Press \"E\" ";
                char check = getch();
                if(check == 'E' || check ==  'e' )
                {
                    RWfile.close();
                    MainMenu('7');
                }           

            MainMenu('0');
        }
}
void File_System :: DeleletFile()
{
    fstream Rfile("File System.txt",ios :: in);
        if(Rfile.is_open())
        {
            system("CLS");
            cout<<"\n\n\t\t\tWelcom To Delete A File Wizard \n\n\n";

            Rfile.close ();
        }
        else
        {
            cout<<"\n\tAn Error Occurred to Open the File System .....\x01\n\tTry Again Latter\n\n";
            getch();
            MainMenu('0');
        }
}
void File_System :: ViewAllFiles()
{
    fstream Rfile("File System.txt",ios :: in);
        if(Rfile.is_open())
        {
            system("CLS");
            cout<<"\n\n\t\t\tWelcom To View All Files Wizard \n\n\n";
            cout<<"\tName Of File \t\tAdress Of File ";
            for(int i=0; i<(SizeOfFirstBlock/SizeOfFirstSubBlock ) ; i++)
            {
                double block = (1 + ( i * SizeOfFirstSubBlock ));
                int SizeofFileName = SizeOfFirstSubBlock ;  // coversion double to int use for new operator
                char *NameofFile = new char[SizeofFileName];
                Rfile.seekg(block);
                Rfile>>NameofFile;
                double AdressOfFile=NULL;
                Rfile>>AdressOfFile;
                 if(AdressOfFile)
                 {
                cout<<"\n\t"<<NameofFile<<"\t\t\t"; cout<<AdressOfFile;
                 }
            }
            cout<<"\n\n Press Any Key To Continue        OR\n To See Data Of Any File press \"S\"        OR \n To Return In Main Menu press \"M\" ";
                char check = getch();
                if(check == 'M' || check ==  'm' )
                {
                    Rfile.close();
                    MainMenu('0');
                }
                else if (check == 'S' || check ==  's' )
                {
                    Rfile.close();
                    MainMenu('3');
                }
            Rfile.close ();
        }
        else
        {
            cout<<"\n\tAn Error Occurred to Open the File System .....\x01\n\tTry Again Latter\n\n";
            cout<<"\n\nTo Try Again Press Any Key To Continue OR To Exit Press \"E\" ";
                char check = getch();
                if(check == 'E' || check ==  'e' )
                {
                    Rfile.close();
                    MainMenu('7');
                }
            MainMenu('0');
        }
}
void File_System :: SearchFile ()
{
    fstream Rfile("File System.txt",ios :: in);
        if(Rfile.is_open())
        {
            system("CLS");
            cout<<"\n\n\t\t\tWelcom To Search A File Wizard \n\n\n";
            cout<<"\n\n Press Any Key To Continue Search OR To Return In Main Menu Press \"M\" ";
                char check = getch();
                if(check == 'M' || check ==  'm' )
                {
                    Rfile.close();
                    MainMenu('6');
                }
                system("CLS");
                cout<<"\n\n\t\t\tWelcom To Search A File Wizard \n\n\n";
                cout<<"\n\n\tEnter The Complete Name Of File Which You Want To Search : ";
                int SizeOfFileName = SizeOfFirstSubBlock ;
                char *SearchName = new char[SizeOfFileName];
                cin>>SearchName;
                char *NameOfFile =new char[SizeOfFileName];
                double AdressOfFile=NULL;
               
                for(int i=0; i<(SizeOfFirstBlock/SizeOfFirstSubBlock ) ; i++)
                {
                    double block = (1 + ( i * SizeOfFirstSubBlock ));
                    Rfile.seekg(block);
                    Rfile>>NameOfFile;
                    Rfile>>AdressOfFile;
                    if ( strcmp(NameOfFile,SearchName ) == 0 )
                    {
                        cout<<"\n\n\tName Of File  : "<<NameOfFile;
                        cout<<"\n\tAddress of File : "<<AdressOfFile;
                       
                        int SizeOfData =  10485760 ;
                        char *Data= new char[SizeOfData];
                        char check = NULL ;
                        int index = 0;
                        double NextDataBlock = NULL;
                   
                        do
                        {
                            Rfile.seekg(AdressOfFile);
                            NextDataBlock = NULL;

                            Rfile.get(check);             //for avoiding of Delimiters
                            while (check != Delimiter )
                            {
                               Data[index++]= check;
                               Rfile.get(check);
                            }

                            check = NULL;
                            Rfile>>NextDataBlock;
                            AdressOfFile = NextDataBlock ;
                           
                           
                        }while (NextDataBlock);

                        Data[index]='\0';
                        cout<<"\n\tData Of File is : "<<Data;
                        cout<<"\n\n\n To Search Again press \"S\"        OR \n To Return In Main Menu press \"M\" ";
                        char checkc = getch();
                        if(checkc != 's' || checkc !=  'S' )
                        {
                            Rfile.close();
                            MainMenu('0');
                        }
                        else if (checkc == 'S' || checkc ==  's' )
                        {
                            Rfile.close();
                            MainMenu('3');
                        }
                        delete Data;
                    }
                }
                cout<<"\n File Not Found ... \x01 \n To Search Again press \"S\"        OR \n To Return In Main Menu press \"M\" ";
                char checkc = getch();
                if(checkc == 'M' || checkc ==  'm' )
                {
                    Rfile.close();
                    MainMenu('0');
                }
                else if (checkc == 'S' || checkc ==  's' )
                {
                    Rfile.close();
                    MainMenu('3');
                }
                delete NameOfFile,AdressOfFile;
            Rfile.close ();
        }
        else
        {
            cout<<"\n\tAn Error Occurred to Open the File System .....\x01\n\tTry Again Latter\n\n";
            cout<<"\n\nTo Try Again Press Any Key To Continue OR To Exit Press \"E\" ";
                char check = getch();
                if(check == 'E' || check ==  'e' )
                {
                    Rfile.close();
                    MainMenu('7');
                }
            MainMenu('0');
        }
}
void File_System :: CopyFileFromWindows ()
{
    fstream RWfile("File System.txt");
        if(RWfile.is_open())
        {
            system("CLS");
            cout<<"\n\n\t\t\tWelcom To Copy File From Windows Wizard \n\n\n";
            cout<<"\n\tEnter The name of file Which You Want To Copy From Windows + Its Compelte Address : ";
            int SizeofFileName = SizeOfFirstSubBlock ;  // coversion double to int use for new operator
            char *NameofFile = new char[SizeofFileName];
            cin>>NameofFile;
            fstream Ofile(NameofFile,ios::in);
            int SizeofDataFile = 10485760;
            char *DataOfFile = new char[SizeofDataFile ];
            if(Ofile.is_open())
            {
                int index=0;
                while (Ofile)
                {
                    Ofile.get(DataOfFile[index++]);
                }
                DataOfFile[index]='\0';
               
                if (strlen(DataOfFile) > SizeOfThirdSubBlock  )
                {
                    double EmptyBlockOfFileName=GetEmptyBlockOfFileName(NameofFile );
                    RWfile.seekp(EmptyBlockOfFileName );
                    double EmptyBlockOfData=GetEmptyBlockOfData();
                    RWfile<<NameofFile<<' '<<EmptyBlockOfData;
                    int SizeOfDataBlock = SizeOfThirdSubBlock;
                    char *str= new char [SizeOfDataBlock];
                    int size = strlen(DataOfFile);
                    int SpaceForNextAddress = 50;
                    while (strlen(DataOfFile) > (SizeOfDataBlock - SpaceForNextAddress ) )
                    {
                        int i;
                        for(i = 0 ; i<(SizeOfDataBlock - SpaceForNextAddress) ; i++)
                            str[i]=DataOfFile[i];
                        str[i]=NULL;
                        int ii;
                        for(ii=0; ii<(strlen(DataOfFile) - (SizeOfDataBlock - SpaceForNextAddress) ); ii++)
                            DataOfFile[ii]=DataOfFile[ii + SizeOfDataBlock - SpaceForNextAddress];
                        DataOfFile[ii]=NULL;


                        RWfile.seekp(EmptyBlockOfData );
                        RWfile<<str;
                        RWfile<<Delimiter ;
                        double NextDataBlock = GetEmptyBlockOfData();
                        RWfile<<NextDataBlock;
                        EmptyBlockOfData = NextDataBlock ;
                    }
               
                        RWfile.seekp(EmptyBlockOfData );
                        RWfile<<DataOfFile;
                        RWfile<<Delimiter ;
                }
                else
                {
                    double EmptyBlockOfFileName=GetEmptyBlockOfFileName(NameofFile );
                    RWfile.seekp(EmptyBlockOfFileName );
                    double EmptyBlockOfData=GetEmptyBlockOfData();
                    RWfile<<NameofFile<<' '<<EmptyBlockOfData;
                    RWfile.seekp(EmptyBlockOfData );
                    RWfile<<DataOfFile;
                    RWfile<<Delimiter ;
                }
       

            }
            else
            {
                cout<<"\n\tAn Error Occurred to Open the File .....\x01\n\tTry Again Latter\n\n";
            }

            cout<<"\n\n\tFile Copy Successfully ... ";
            cout<<"\n To Copy Any Other File press \"C\"        OR \n To Return In Main Menu press \"M\" ";
            char checkc = getch();
            if(checkc != 'C' || checkc !=  'c' )
            {
                RWfile.close();
                MainMenu('0');
            }       
            else if (checkc == 'C' || checkc ==  'c' )
            {
                RWfile.close();
                MainMenu('4');
            }
        }
        else
        {
            cout<<"\n\tAn Error Occurred to Open the File System .....\x01\n\tTry Again Latter\n\n";
            cout<<"\n\nTo Try Again Press Any Key To Continue OR To Exit Press \"E\" ";
                char check = getch();
                if(check == 'E' || check ==  'e' )
                {
                    RWfile.close();
                    MainMenu('7');
                }
            MainMenu('0');
        }
}
void File_System :: CopyFileFromFileSystem()
{
    fstream Rfile("File System.txt",ios :: in);
        if(Rfile.is_open())
        {
            system("CLS");
            cout<<"\n\n\t\tWelcom To Copy File From File System Wizard \n\n\n";
                cout<<"\n\n\tEnter The Complete Name Of File Which You Want To Copy : ";
                int SizeOfFileName = SizeOfFirstSubBlock ;
                char *SearchName = new char[SizeOfFileName];
                cin>>SearchName;
                char *NameOfFile =new char[SizeOfFileName];
                double AdressOfFile=NULL;
               
                for(int i=0; i<(SizeOfFirstBlock/SizeOfFirstSubBlock ) ; i++)
                {
                    double block = (1 + ( i * SizeOfFirstSubBlock ));
                    Rfile.seekg(block);
                    Rfile>>NameOfFile;
                    Rfile>>AdressOfFile;
                    if ( strcmp(NameOfFile,SearchName ) == 0 )
                    {
                        char *AddressOffile = new char[100];
                        char *NameOfFile=new char[50];
                        cout<<"\n\tEnter The Address Where You Want To Create File ";
                        cin>>AddressOffile;
                        strcat(AddressOffile,SearchName);
                        ofstream Wfile(AddressOffile,ios::out | ios::_Noreplace );
                            if(Wfile.is_open())
                            {
                               
                                int SizeOfData =  10485760 ;
                                char *Data= new char[SizeOfData];
                                char check = NULL ;
                                int index = 0;
                                double NextDataBlock = NULL;
                   
                                do
                                {
                                    Rfile.seekg(AdressOfFile);
                                    NextDataBlock = NULL;

                                    Rfile.get(check);             //for avoiding of Delimiters
                                    while (check != Delimiter )
                                    {
                                       Data[index++]= check;
                                       Rfile.get(check);
                                    }

                                    check = NULL;
                                    Rfile>>NextDataBlock;
                                    AdressOfFile = NextDataBlock ;
                           
                           
                                }while (NextDataBlock);

                                Data[index]='\0';
                                Wfile<<Data;
                                Wfile.close();
                                delete Data;
                                cout<<"\n\n\tFile Copy Successfully ... ";
                                cout<<"\n To Copy Any Other File press \"C\"        OR \n To Return In Main Menu press \"M\" ";
                                char checkc = getch();
                                if(checkc != 'C' || checkc !=  'c' )
                                {
                                    Rfile.close();
                                    MainMenu('0');
                                }
                                else if (checkc == 'C' || checkc ==  'c' )
                                {
                                    Rfile.close();
                                    MainMenu('5');
                                }
       
                            }
                            else
                            {
                                cout<<"\n\tAn Error Occurred In Creation New File .....\x01\n\t*May Be Any Other File Exist In Same Location Having Same Name..\n\tTry Again Latter\n\n";
                                cout<<"\n\nTo Try Again Press Any Key To Continue OR To Exit Press \"E\" ";
                                    char check = getch();
                                    if(check == 'E' || check ==  'e' )
                                    {
                                        Rfile.close();
                                        MainMenu('7');
                                    }
                                MainMenu('5');
                            }
                    }
                       
                }
                cout<<"\n " <<NameOfFile <<"  Not Found In File System  ... \x01 \n To Try Any Other press \"C\"        OR \n To Return In Main Menu press \"M\" ";
                char checkc = getch();
                if(checkc == 'M' || checkc ==  'm' )
                {
                    Rfile.close();
                    MainMenu('0');
                }
                else if (checkc == 'C' || checkc ==  'c' )
                {
                    Rfile.close();
                    MainMenu('5');
                }
       
                delete NameOfFile,AdressOfFile;
            Rfile.close ();
        }
        else
        {
            cout<<"\n\tAn Error Occurred to Open the File System .....\x01\n\tTry Again Latter\n\n";
            cout<<"\n\nTo Try Again Press Any Key To Continue OR To Exit Press \"E\" ";
                char check = getch();
                if(check == 'E' || check ==  'e' )
                {
                    Rfile.close();
                    MainMenu('7');
                }
            MainMenu('0');
        }
}
void File_System ::  EmptySpace()
{
    fstream Rfile("File System.txt",ios :: in);
        if(Rfile.is_open())
        {
            system("CLS");
            cout<<"\n\n\t\t\tWelcom To Mermory Status Wizard \n\n\n";
                int FreeBlocks = NULL;
                for( int i =0 ; i<(SizeOfThirdBlock /SizeOfThirdSubBlock ) ; i++)
                {
                    double Block= SizeOfFirstBlock + 1 +(i*(SizeOfSecondBlock ));
                    double check=NULL;
                    Rfile.seekg(Block);
                    Rfile>>check;
                    if(check == NULL)
                    {
                        ++FreeBlocks;
                    }
               
                }
                cout<<"++FreeBlocks; " <<FreeBlocks;
                cout<<"\n\tTotal Size Of File System : "<<(SizeOfFirstBlock + SizeOfSecondBlock + SizeOfThirdBlock )<<" Bytes ";
                cout<<"\n\n\t      Capacity Of Storage : "<< ( SizeOfThirdBlock ) <<" Bytes ";
                cout<<"\n\n\n\t               Used Space : "<< (SizeOfThirdBlock - (FreeBlocks * SizeOfThirdSubBlock )) <<" Bytes ";
                cout<<"\n\n\n\t               Free Space : "<< (FreeBlocks * SizeOfThirdSubBlock ) <<" Bytes ";
                getch();
            Rfile.close ();
        }
        else
        {
            cout<<"\n\tAn Error Occurred to Open the File System .....\x01\n\tTry Again Latter\n\n";
            cout<<"\n\nTo Try Again Press Any Key To Continue OR To Exit Press \"E\" ";
                char check = getch();
                if(check == 'E' || check ==  'e' )
                {
                    Rfile.close();
                    MainMenu('7');
                }
            MainMenu('0');
        }
}
void File_System :: Exit()
{
    exit(1);
}


void MainMenu(char a = '0')    //default arrgument , if user call this function with an arguument then argumental value would assign to "a" , and if user call thiz function without arrgument then by default "0" would assign to "a"
{
    static File_System test;
    if(a == '0')
    {   
        system("CLS");
    cout<<"\n\n\t\t\tWelcom To File System \n\n\n";
    cout<<"\tMain Menu: \n";
    cout<<"\n\t1). To Create A New File\n";
    cout<<"\n\t2). To View All Files\n";
    cout<<"\n\t3). To Search A File\n";
    cout<<"\n\t4). To Copy File From Windows\n";
    cout<<"\n\t5). To Copy File From File System\n";
    cout<<"\n\t6). To See Memory Status \n";
    cout<<"\n\t7). To EXit From System ";
    cout<<"\n\n\tChoose your Choice : ";
    a=getch();
    }
    switch(a)
    {
    case '1':
        {
            test.CreatNewFile ();
            break;
        }
    case '2':
        {
            test.ViewAllFiles ();
            break;
        }
    case '3':
        {
            test.SearchFile ();
            break;
        }
    case '4':
        {
            test.CopyFileFromWindows ();
            break;
        }
        case '5':
        {
            test.CopyFileFromFileSystem();
            break;
        }

    case '6':
        {
            test.EmptySpace ();
            break;
        }
    case '7':
            {
                test.Exit ();
                break;
            }

    }
    MainMenu();
}

void main()
{
    MainMenu();
    system("PAUSE");
}

0 comments: