private void HandleOther(string arg, CommandRequestedEnum state)
        {
            switch (state)
            {
            case CommandRequestedEnum.GetSnapshot:
                parameters.SnapshotSaveFilePath = arg;
                if (!FileCanBeSaved(arg))
                {
                    throw new InvalidParameterExcetion("Invalid parameter: " + arg);
                }
                break;

            case CommandRequestedEnum.CompareSnapshots:
                parameters.DiffSaveFilePath = arg;
                if (!FileCanBeSaved(arg))
                {
                    throw new InvalidParameterExcetion("Invalid parameter: " + arg);
                }
                break;
            }
        }
        public void Init(string[] args)
        {
            var currentState = CommandRequestedEnum.None;

            commandRequested = CommandRequestedEnum.None;
            for (int i = 0; i < args.Length; ++i)
            {
                switch (args[i].ToLower())
                {
                case "-s":
                case "--search":
                    HandleSearch(args, ref i);
                    commandRequested |= CommandRequestedEnum.GetSnapshot;
                    currentState      = CommandRequestedEnum.GetSnapshot;
                    break;

                case "-c":
                case "--compare":
                    HandleCompare(args, ref i);
                    commandRequested |= CommandRequestedEnum.CompareSnapshots;
                    currentState      = CommandRequestedEnum.CompareSnapshots;
                    break;

                case "--sortbysize":
                    parameters.DiffSortBySize = true;
                    break;

                case "--parallel":
                    parameters.ParalelFind = true;
                    break;

                case "-h":
                case "--help":
                    commandRequested = CommandRequestedEnum.Help;
                    // do not proccess anything more just show help
                    return;

                default:
                    HandleOther(args[i], currentState);
                    break;
                }
            }

            if ((commandRequested & CommandRequestedEnum.CompareSnapshots) == 0 && parameters.DiffSortBySize)
            {
                throw new InvalidParameterExcetion("Sort by size specified but snapshot to compare doesnt");
            }

            if ((commandRequested & CommandRequestedEnum.CompareSnapshots) > 0 && string.IsNullOrEmpty(parameters.DiffSaveFilePath))
            {
                throw new InvalidParameterExcetion("Diff file path not specified");
            }

            short snapAndCompare = (short)CommandRequestedEnum.CompareSnapshots + (short)CommandRequestedEnum.GetSnapshot;

            if (((short)commandRequested & snapAndCompare) == (short)CommandRequestedEnum.GetSnapshot &&
                string.IsNullOrEmpty(parameters.SnapshotSaveFilePath))
            {
                throw new InvalidParameterExcetion("Snapshot file path not specified");
            }
        }