[go: up one dir, main page]

Menu

Diff of /MakeFile.cpp [000000] .. [r1]  Maximize  Restore

Switch to side-by-side view

--- a
+++ b/MakeFile.cpp
@@ -0,0 +1,166 @@
+// MakeFile.cpp : Defines the entry point for the console application.
+//
+
+#include "stdafx.h"
+#include "makefile.h"
+#include <iostream>
+#include <io.h>
+#include "windows.h"
+#include "fcntl.h"
+
+//** 2010-05-19 22-23-23 Rett Pop [+]: Program version
+#define PROGRAM_NAME	"MKEF"
+#define VER_MAJOR	1
+#define VER_MINOR	0
+
+using namespace std;
+
+//** 2010-05-19 22-23-13 Rett Pop [+]: Global variables
+__int64 giFSize = 0;
+int giMult	= MULTIPL_M;
+_TCHAR* cpDestPath = NULL; 
+_TCHAR* cpFName = NULL;
+
+int _tmain(int argc, _TCHAR* argv[])
+{
+
+	//if ( 1 == argc )
+	{
+		printf("\n%s ver: %i.%i\n\n", PROGRAM_NAME, VER_MAJOR, VER_MINOR);
+		cout << "Make empty file.\n\nUsage: mkfe [-n <file name>] [-p <file path>] [-s <file size>]\n\t[-u <units>] [-h|/h|-?]\n\n";
+		cout << " -n <file name>\tFile of new file.\n\tBy default - unique name for gived directory\n";
+		cout << " -p <file path>\tDestination path where file will be created.\n\tBy default - current directory\n";
+		cout << " -s <file size>\tSize of new file.\n\tBy default - whole empty space on <file path>\n";
+		cout << " -u <units>\tUnits of gived size. Understood: B, K, M, G.\n\tBy default - M(egabytes)\n";
+		cout << " -h|/? \tShow this help and exit\n";
+
+	//	return ERR_NOPARAMS;
+	}
+	
+	//** 2010-05-20 01-18-57 Rett Pop [+]: If no params gived, ask to start
+	if ( 1 == argc ) {
+		cout << "\n It will create file which fill all free space on current drive!\nAre you sure?: (case sensitive Y/N)";
+		if ( 'Y' != getchar() )
+			return ERR_OK;
+	}
+
+	//** 2010-05-19 22-25-50 Rett Pop [+]: Process command line params
+	try
+	{
+		for ( int i=1; i<argc; i++ )
+		{
+			if (	( 0 == wcscmp(argv[i] ,_T("-h")) ) || 
+					(0 == wcscmp( argv[i] ,_T("/?") )) ||
+					(0 == wcscmp( argv[i] ,_T("-?") )) ) 
+			{
+				return ERR_OK;
+			}
+
+			if ( (0 == wcscmp( argv[i] ,_T("-h") )) && (i<argc) ){
+				return ERR_OK;
+			}
+
+			if ( (0 == wcscmp( argv[i] ,_T("-n") )) && (i<argc) ){
+				cpFName = argv[((++i)++)]; // get next and increase to next+next
+			}
+			
+			if ( i >= argc ) break; //
+
+			if ( (0 == wcscmp( argv[i] ,_T("-p") )) && (i<argc) ){
+				cpDestPath = argv[((++i)++)]; // get next and increase to next
+			}
+
+			if ( i >= argc ) break; //
+
+			if ( (0 == wcscmp( argv[i] ,_T("-s") )) && (i<argc) ){
+				giFSize = _wtoi( argv[((++i)++)] ); // get next and increase to next
+			}
+
+			if ( i >= argc ) break; //
+
+			if ( (0 == wcscmp( argv[i] ,_T("-u") )) && (i<argc) ){
+				_TCHAR* cUn = argv[((++i)++)];
+				if ( 0 == wcscmp( cUn, _T("B")) ) giMult = MULTIPL_B;
+				if ( 0 == wcscmp( cUn, _T("K")) ) giMult = MULTIPL_K;
+				if ( 0 == wcscmp( cUn, _T("M")) ) giMult = MULTIPL_M;
+				if ( 0 == wcscmp( cUn, _T("G")) ) giMult = MULTIPL_G;
+			}
+		}
+	}
+	catch(...){
+		cerr << "Error processing command line parameters\n";
+		return ERR_BADRAMS;
+	}
+
+	//** 2010-05-19 22-39-17 Rett Pop [+]: If destination path not gived, takes current directory
+	if ( NULL == cpDestPath ){
+		cpDestPath = new _TCHAR[_MAX_PATH];
+		if ( NULL == _wgetcwd(cpDestPath, _MAX_PATH) ){
+			cerr << "Error determining currend working directory";
+			return ERR_PATH;
+		}
+	} else { // else try to change current directory to given
+		if ( 0 != _wchdir( cpDestPath ) ) {
+			cerr << "Error changing working directory";
+			return ERR_PATH;
+		}
+	}
+
+	//** 2010-05-19 22-37-51 Rett Pop [+]: Calculate target size, if given
+	if ( giFSize > 0 ){
+		giFSize *= giMult;
+	} 
+	else
+	{
+		//** 2010-05-19 23-12-03 Rett Pop [+]: Try to determine free disk space
+		__int64 i64FreeBytesToCaller, i64TotalBytes, i64FreeBytes;
+		if ( 0 == GetDiskFreeSpaceEx(	cpDestPath, 
+							(PULARGE_INTEGER) &i64FreeBytesToCaller, 
+							(PULARGE_INTEGER) &i64TotalBytes, 
+							(PULARGE_INTEGER) &giFSize) 
+							) {
+			cerr << "Error determining free disk space\n";
+			return ERR_DISK;
+		}
+	}
+
+	//** 2010-05-19 22-47-40 Rett Pop [+]: If file name not given, take unique temp-file name
+	if ( NULL == cpFName ) 
+	{
+		_TCHAR* cpT = _T("mkfXXXXX");
+		cpFName = new _TCHAR[MAX_PATH];
+		
+		if ( 0 == GetTempFileName(cpDestPath, _T("mkf"), 0, cpFName ) ) {
+			cerr << "Error generating unique filename\n";
+			return ERR_FILENAME;
+		}
+	}
+
+	//** 2010-05-19 23-07-10 Rett Pop [+]: try to create file
+	int fh = _wopen(cpFName, _O_CREAT | _O_WRONLY );
+	
+	//** 2010-05-19 23-10-03 Rett Pop [+]: If error on creating file occurs - exit
+	if ( -1 == fh ) {
+		cerr << "Error creating file " << cpFName << endl;
+		return ERR_FILE;
+	}
+
+	wprintf(_T("Start to create file %s on path %s with size %i bytes\n"), cpFName, cpDestPath, giFSize);
+	cout << "Please, be patient. It can takes a few minutes.\n";
+	//_chsize(fh, giFSize);
+	DWORD iTicks = GetTickCount();
+	char* pEB = new char[4*MULTIPL_K];
+	memset(pEB, 0x0, 4*MULTIPL_K);
+	for ( __int64 i = 0; i <= giFSize; i+=(4*MULTIPL_K) )
+	{
+		_write(fh, pEB, 4*MULTIPL_K);
+	}
+	_close (fh);
+	cout << "File succefully created. It took " << ((GetTickCount() - iTicks)/1000) << " seconds.\n";
+
+	delete[] pEB;
+	delete[] cpFName;	
+
+	return 0;
+}
+