Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторная работа №3

.cpp
Скачиваний:
20
Добавлен:
01.05.2014
Размер:
12.83 Кб
Скачать
#include <iostream.h>
#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>

void main(void){

	int choice1,choice2,choice3,choice4;
	TCHAR fileName[MAX_PATH+255];
	DWORD desiredAccess;
	DWORD shareMode;
	LPSECURITY_ATTRIBUTES securityAttributes;
	DWORD creationDisposition;
	DWORD flagsAndAttributes;
	HANDLE templateFile;
	HANDLE file;
	desiredAccess=GENERIC_READ|GENERIC_WRITE;//read-write access
	shareMode=FILE_SHARE_DELETE|FILE_SHARE_READ|FILE_SHARE_WRITE;//full share
	securityAttributes=0;//default security descriptor
	flagsAndAttributes=0;
	templateFile=0;//no template file
	do{
		system("cls");
	    cout<<"1. Create New File\n";
	    cout<<"2. Open Existing File\n";
		cout<<"3. Exit\n";
		cout<<"Enter your choice: ";
		cin>>choice1;
		switch(choice1){
		/////////////
		case 1: cout<<"Input file name: ";
				cin>>fileName;
		        creationDisposition=CREATE_NEW;//no overwrite
				do{
					system("cls");
					cout<<"1. Archive\n";
					cout<<"2. Hidden\n";
					cout<<"3. Normal\n";
					cout<<"4. Read-Only\n";
					cout<<"5. System\n";
					cout<<"6 Temporary\n";
					cout<<"7 Continue\n";
					cout<<"Input file attributes: ";
					cin>>choice3;
					switch(choice3){
					case 1: flagsAndAttributes = FILE_ATTRIBUTE_ARCHIVE;//0x20
							break;
					case 2: flagsAndAttributes = FILE_ATTRIBUTE_HIDDEN;//0x2
    						 break;
					case 3: flagsAndAttributes = FILE_ATTRIBUTE_NORMAL;//0x80
							break;
					case 4: flagsAndAttributes = FILE_ATTRIBUTE_READONLY;//0x1
							break;
					case 5: flagsAndAttributes = FILE_ATTRIBUTE_SYSTEM;//0x4
	     					break;
					case 6: flagsAndAttributes = FILE_ATTRIBUTE_TEMPORARY;//0x100
							break;
					case 7: break;
					default: cout<<"Error";
							 getch();
					}
				}while(choice3!=7);
				file=CreateFile(fileName,desiredAccess,shareMode,securityAttributes,creationDisposition,flagsAndAttributes,templateFile);
				if(file==INVALID_HANDLE_VALUE)
					cout<<"Error";
				else {cout<<"The new file is created successfully!\n"; 
					  choice1=4;
					}            
				break;
///////////////////////////////////////////

		case 2: cout<<"Input file name: ";
				cin>>fileName;
				creationDisposition=OPEN_EXISTING;//open
				file = CreateFile(fileName,desiredAccess,shareMode,securityAttributes,creationDisposition,flagsAndAttributes,templateFile);
				if(file==INVALID_HANDLE_VALUE)
					{
					 cout<<"Error"<<endl;
					 getch();
					 choice1=4;
					}
				else
					{
					 LPDWORD FileSize_H=new DWORD(1); 
                     DWORD FileSize_L;
                     DWORD fileAttributes=0;
                     LPFILETIME lpCreationTime=new FILETIME;
                     LPFILETIME lpLastAccessTime=new FILETIME;
                     LPFILETIME lpLastWriteTime=new FILETIME;
						             		 
					 LPSYSTEMTIME Sys_CreationTime=new SYSTEMTIME;		   
	                 LPSYSTEMTIME Sys_LastAccessTime=new SYSTEMTIME;		   
	                 LPSYSTEMTIME Sys_LastWriteTime=new SYSTEMTIME;		   
	                 LPWORD lpFatDate_C=new WORD;
                     LPWORD lpFatTime_C=new WORD;
	                 LPWORD lpFatDate_A=new WORD;
                     LPWORD lpFatTime_A=new WORD;
                     LPWORD lpFatDate_W=new WORD;
                     LPWORD lpFatTime_W=new WORD;
                     int flag=0;
	                 do{
		                 system("cls");
		                 cout<<"1. Get File Information By Handle\n";
		                 cout<<"2. Get File Size\n";
                         cout<<"3. Set File Attributes\n";
		                 cout<<"4. Get File Time\n";
		                 cout<<"5. Exit\n";
		                 cout<<"Enter your choice: ";
		                 cin>>choice2;
		                 switch(choice2){
			             case 1: _BY_HANDLE_FILE_INFORMATION fileInformation;
					             SYSTEMTIME fTime;
					             WORD fatDate;//DOS format date
					             WORD fatTime;//DOS format time
					             if(!GetFileInformationByHandle(file, &fileInformation))
						             cout<<"Error";

					             else{

						cout<<"File attributes:\n";
						if(fileInformation.dwFileAttributes&FILE_ATTRIBUTE_ARCHIVE) cout<<"  Archive\n";
						if(fileInformation.dwFileAttributes&FILE_ATTRIBUTE_COMPRESSED) cout<<"  Compressed\n";
						if(fileInformation.dwFileAttributes&FILE_ATTRIBUTE_ENCRYPTED) cout<<"  Encrypted\n";
						if(fileInformation.dwFileAttributes&FILE_ATTRIBUTE_HIDDEN) cout<<"  Hidden\n";
						if(fileInformation.dwFileAttributes&FILE_ATTRIBUTE_NORMAL) cout<<"  Normal\n";
						if(fileInformation.dwFileAttributes&FILE_ATTRIBUTE_READONLY) cout<<"  Read-Only\n";
						if(fileInformation.dwFileAttributes&FILE_ATTRIBUTE_SYSTEM) cout<<"  System\n";
						if(fileInformation.dwFileAttributes&FILE_ATTRIBUTE_TEMPORARY) cout<<"  Temporary\n";

						cout<<"Windows format: \n";
						if(FileTimeToSystemTime(&fileInformation.ftCreationTime, &fTime)){
							cout<<"	Creation Time: "<<fTime.wDay<<"."<<fTime.wMonth<<"."<<fTime.wYear<<" ";
							cout<<fTime.wHour<<":"<<fTime.wMinute<<":"<<fTime.wSecond<<endl;
						}
						else cout<<"Error\n";
						if(FileTimeToSystemTime(&fileInformation.ftLastAccessTime, &fTime)){
							cout<<"	Last Access Time: "<<fTime.wDay<<"."<<fTime.wMonth<<"."<<fTime.wYear<<" ";
							cout<<fTime.wHour<<":"<<fTime.wMinute<<":"<<fTime.wSecond<<endl;
						}
						else cout<<"Error\n";
						if(FileTimeToSystemTime(&fileInformation.ftLastWriteTime, &fTime)){
							cout<<"	Last Write Time: "<<fTime.wDay<<"."<<fTime.wMonth<<"."<<fTime.wYear<<" ";
							cout<<fTime.wHour<<":"<<fTime.wMinute<<":"<<fTime.wSecond<<endl;
						}
						else cout<<"Error\n";

						cout<<"DOS format: \n";
						if(FileTimeToDosDateTime(&fileInformation.ftCreationTime, &fatDate, &fatTime)){
							cout<<"	Creation Time: "<<(fatDate&0x1F)<<"."<<((fatDate&0x1E0)>>5)<<"."<<((fatDate&0xFE00>>9)+1980)<<" ";
							cout<<((fatTime&0xF800)>>11)<<":"<<((fatTime&0x7E0)>>5)<<":"<<((fatTime&0x1F)*2)<<endl;
						}
						else cout<<"Error\n";
						if(FileTimeToDosDateTime(&fileInformation.ftLastAccessTime, &fatDate, &fatTime)){
							cout<<"	Last Access Time: "<<(fatDate&0x1F)<<"."<<((fatDate&0x1E0)>>5)<<"."<<((fatDate&0xFE00>>9)+1980)<<" ";
							cout<<((fatTime&0xF800)>>11)<<":"<<((fatTime&0x7E0)>>5)<<":"<<((fatTime&0x1F)*2)<<endl;
						}
						else cout<<"Error\n";
						if(FileTimeToDosDateTime(&fileInformation.ftLastWriteTime, &fatDate, &fatTime)){
							cout<<"	Last Write Time: "<<(fatDate&0x1F)<<"."<<((fatDate&0x1E0)>>5)<<"."<<((fatDate&0xFE00>>9)+1980)<<" ";
							cout<<((fatTime&0xF800)>>11)<<":"<<((fatTime&0x7E0)>>5)<<":"<<((fatTime&0x1F)*2)<<endl;
						}
						else cout<<"Error\n";
						    
										

										cout<<"Volume Serial Number: "<<fileInformation.dwVolumeSerialNumber<<endl;
										cout<<"File Size High: "<<fileInformation.nFileSizeHigh<<endl;
										cout<<"File Size Low: "<<fileInformation.nFileSizeLow<<endl;
										cout<<"Number Of Links: "<<fileInformation.nNumberOfLinks<<endl;
										cout<<"File Index High: "<<fileInformation.nFileIndexHigh<<endl;
										cout<<"File Index Low: "<<fileInformation.nFileIndexLow<<endl;
										getch();
									}
									
									break;
						 case 2:  FileSize_L=GetFileSize(file,FileSize_H);
								  if(INVALID_FILE_SIZE==FileSize_L){cout<<"Error!";}
								  else cout<<"File Size High: "<<*FileSize_H<<" byte"<<"\nFile Size Low: "<<FileSize_L<<" byte";
								       cout<<flush;
									   getch();
									   cout<<flush;
								  break;
						 case 3:  do{
									system("cls");
									cout<<"1. Archive\n";
									cout<<"2. Hidden\n";
									cout<<"3. Normal\n";
									cout<<"4. Read-Only\n";
									cout<<"5. System\n";
									cout<<"6. Temporary\n";
									cout<<"7. Not indexed\n";
									cout<<"8. Continue\n";
									cout<<"Input file attributes: ";
									cin>>choice3;
									switch(choice3){
									case 1: flagsAndAttributes = FILE_ATTRIBUTE_ARCHIVE;//0x20
											break;
									case 2: flagsAndAttributes = FILE_ATTRIBUTE_HIDDEN;//0x2
         								    break;
									case 3: flagsAndAttributes = FILE_ATTRIBUTE_NORMAL;//0x80
											break;
									case 4: flagsAndAttributes = FILE_ATTRIBUTE_READONLY;//0x1
											break;
									case 5: flagsAndAttributes = FILE_ATTRIBUTE_SYSTEM;//0x4
											break;
									case 6: flagsAndAttributes = FILE_ATTRIBUTE_TEMPORARY;//0x100
											break;
									case 7: flagsAndAttributes = FILE_ATTRIBUTE_NOT_CONTENT_INDEXED;
											break;
									case 8: break;
									default: cout<<"Error";
								 		    getch();
									}
									}while(choice3!=8);
							 if(!SetFileAttributes(fileName,flagsAndAttributes))//fileAttributes))
							           cout<<"Error!";
					 	          break;
						 case 4:  if(!GetFileTime(file,lpCreationTime,lpLastAccessTime,lpLastWriteTime))cout<<"Error!";
									do{
										system("cls");
										cout<<"\nFormats of date and time.\n\n1. System Time\n2. Dos Time\n3. Return from Dos Time in File Time \n4. Continue";
										cout<<"\nEnter your choice: ";
										cin>>choice4;
										switch(choice4){
										case 1:  system("cls");
												 FileTimeToSystemTime(lpCreationTime,Sys_CreationTime);
												 FileTimeToSystemTime(lpLastAccessTime,Sys_LastAccessTime);
												 FileTimeToSystemTime(lpLastWriteTime,Sys_LastWriteTime);
							 		             cout<<" Creation Time:\n";
												 cout<<"  Year: "<<Sys_CreationTime->wYear;
												 cout<<"  Month: "<<Sys_CreationTime->wMonth;
												 cout<<"  Day Of Week: "<<Sys_CreationTime->wDayOfWeek;
												 cout<<"  Day: "<<Sys_CreationTime->wDay;
												 cout<<"  Hour: "<<Sys_CreationTime->wHour;
												 cout<<"  Minute: "<<Sys_CreationTime->wMinute;
												 cout<<"  Second: "<<Sys_CreationTime->wSecond;
												 cout<<"  Milliseconds: "<<Sys_CreationTime->wMilliseconds;
							      				 cout<<"\n Last Access Time:\n";
												 cout<<"  Year: "<<Sys_LastAccessTime->wYear;
												 cout<<"  Month: "<<Sys_LastAccessTime->wMonth;
												 cout<<"  Day Of Week: "<<Sys_LastAccessTime->wDayOfWeek;
											 	 cout<<"  Day: "<<Sys_LastAccessTime->wDay;
												 cout<<"  Hour: "<<Sys_LastAccessTime->wHour;
												 cout<<"  Minute: "<<Sys_LastAccessTime->wMinute;
												 cout<<"  Second: "<<Sys_LastAccessTime->wSecond;
												 cout<<"  Milliseconds: "<<Sys_LastAccessTime->wMilliseconds;
                     							 cout<<"\n Last Write Time:\n";
												 cout<<"  Year: "<<Sys_LastWriteTime->wYear;
												 cout<<"  Month: "<<Sys_LastWriteTime->wMonth;
												 cout<<"  Day Of Week: "<<Sys_LastWriteTime->wDayOfWeek;
												 cout<<"  Day: "<<Sys_LastWriteTime->wDay;
												 cout<<"  Hour: "<<Sys_LastWriteTime->wHour;
												 cout<<"  Minute: "<<Sys_LastWriteTime->wMinute;
												 cout<<"  Second: "<<Sys_LastWriteTime->wSecond;
												 cout<<"  Milliseconds: "<<Sys_LastWriteTime->wMilliseconds;
              									 cout<<flush;
												 getch();
											break;
										case 2:  system("cls");
												FileTimeToDosDateTime(lpCreationTime,lpFatDate_C,lpFatTime_C);
												FileTimeToDosDateTime(lpLastAccessTime,lpFatDate_A,lpFatTime_A);
												FileTimeToDosDateTime(lpLastWriteTime,lpFatDate_W,lpFatTime_W);
												cout<<" Creation Time:\n";
												cout<<" Date: "<<*lpFatDate_C<<" Time: "<<*lpFatTime_C;
												cout<<"\n Last Access Time:\n";
												cout<<" Date: "<<*lpFatDate_A<<" Time: "<<*lpFatTime_A;
												cout<<"\n Last Write Time:\n";
												cout<<" Date: "<<*lpFatDate_W<<" Time: "<<*lpFatTime_W;
												cout<<flush;
												getch();
												flag=1;
												break;
										case 3:if(!flag)
												   break;
												system("cls");
												DosDateTimeToFileTime(*lpFatDate_C,*lpFatTime_C,lpCreationTime);
												DosDateTimeToFileTime(*lpFatDate_A,*lpFatTime_A,lpLastAccessTime);
												DosDateTimeToFileTime(*lpFatDate_W,*lpFatTime_W,lpLastWriteTime);
											    break;
												}
									}while(choice4!=4);
									break;
						case 5: CloseHandle(file);
							    break;
						default: cout<<"Error"<<endl;
								getch();
								}
	
					}while(choice2!=5);
	}
			break;
////////////////////////////////////////////
		case 3: exit(0);
			break;
		
		default:cout<<"Error";
			getch();
	   }
	}while(choice1 !=3);
}