//Programmer : MustafaJF@Aol.com #include #include #include #include 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 File(s)" << "\n ( 4 ) - Read File(s)" << "\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: menu(); } } //*******************تابع تعیین زمان سپری شده برای انجام هر عملیات 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; }