#include <iostream>
#include <fstream>
#include <string>
#include <ctime>
#include <cstring>
#include <cstdlib>
using namespace std;
void Menu();
void GetTime();
void clrscr();
void SetFileNames();
//****************آرایه دو بعدی برای ذخیره نام فایلها
char fileNames[1024][4];
long start, end, buffer, fileSize, oldFileSize = 1024000;
//***************************کلاس ایجاد و خواندن فایل
class file
{
char str[1025];
long bytes;
public:
file();
~file();
void setStr(char chr);
void makeFile(char *fileName, int buffer, long fileSize);
void readFile(char *fileName, int buffer, long fileSize, bool writeDevided);
void delFile ();
}File;
file::file()
{
setStr('a');
makeFile("Text.txt",1024,102400);
}
file::~file()
{
remove("Text.txt");
}
void file::setStr(char chr)
{
for (int i = 0; i <= 1023; i++)
str[i] = chr;
}
void file::makeFile(char *fileName, int buffer, long fileSize)
{
ofstream out(fileName, ios::out | ios::binary);
long aaa = 0;
bytes = fileSize * 1024 / buffer;
while (aaa < bytes)
{
out.write(str, buffer);
aaa ++;
}
out.close();
}
void file::readFile(char *fileName, int buffer, long fileSize, bool wr)
{
ifstream in(fileName, ios::in | ios::binary);
int a;
ofstream out;
File.delFile();
for (int i = 0; i < 102400 / fileSize; i++)
{
if (wr)
out.open((char*)fileNames[i], ios::out | ios::binary);
for (int j = 0; j < ((102400 / (102400 / fileSize)) * 1024) / buffer; j++)
{
in.read(str, buffer);
if (wr)
out.write(str, buffer);
}
out.close();
}
in.close();
oldFileSize = fileSize;
}
void file::delFile ()
{
for (int i = 0; i < 102400 / oldFileSize; i++)
remove((char*)fileNames[i]);
}
int main (int argc,char *argv[])
{
SetFileNames();
Menu();
return 0;
}
//*******************نمایش منو برای تعیین اندازه بافر, اندازه فایل و ایجاد و یا خواندن فایل در بافر
void Menu()
{
int choice;
cout << "\n ( 1 ) - Set the size of buffer" << "\n ( 2 ) - Set the size of File" << "\n ( 3 ) - Create the File" << "\n ( 4 ) - Read Read the File" << "\n ( 5 ) - Exit" << "\n" ;
cout << "\n Enter the number (1 to 5) : ";
cin >> choice;
switch (choice)
{
case 1:
{
clrscr();
cout << "\n - Enter the size of buffer (under 1024) : ";
cin >> buffer;
Menu();
break;
}
case 2:
{
clrscr();
cout << "\n (Sizes [100-MB ; 10-MB ; 1-MB ; 100-KB] are recomended) for 100MB enter 102400 \n - Enter the size of File in KB : ";
cin >> fileSize;
Menu();
break;
}
case 3:
{
clrscr();
if (buffer <= 0)
cout << "Set the buffer`s size \n";
else if (fileSize <= 0)
cout << "Set the File`s size \n";
else
{
File.readFile("Text.txt", buffer,fileSize, true);
GetTime();
}
Menu();
break;
}
case 4:
{
clrscr();
if (buffer <= 0)
cout << "Set the buffer`s size \n";
else if (fileSize <= 0)
cout << "Set the File`s size \n";
else
{
File.readFile("Text.txt", buffer,fileSize, false);
GetTime();
}
Menu();
break;
}
case 5:
{
File.delFile();
exit(1);
}
default:
while (choice < 1 || choice >5)
{
cout << "\n Choose a number between 1 to 5 : ";
cin >> choice;
}
}
}
//*******************تابع تعیین زمان سپری شده برای انجام هر عملیات
void GetTime()
{
long miliSecond, seconds, minutes, timer;
start = end;
end = clock() / 1000;
timer = difftime (end, start);
miliSecond = timer % 1000;
seconds = timer / 1000 % 60;
minutes = timer / 60000;
cout << endl << minutes << " Minutes " << seconds << " Seconds " << miliSecond << " Mili Seconds " << endl;
}
//********************تابع برای ایجاد یکدسته فایل برای تقسیم کردن فایل بزرگتر به فایلهای کوچکتر
void SetFileNames()
{
int aaa = 0;
for(int i = 97; i <= 122; i++)
for(int j = 97; j <= 122; j++)
for(int k = 97; k <= 122; k++)
{
if (aaa == 1024)
break;
fileNames[aaa][0] = (char)i;
fileNames[aaa][1] = (char)j;
fileNames[aaa][2] = (char)k;
aaa++;
}
}
void clrscr()
{
for (int i = 0; i < 60; i++)
cout << endl;
}