const CmdLineItem & CmdLineIterator::peek() const
{
	if (!hasItems()) throwIteratorNoMoreItems(THISLOCATION,typeid(CmdLineItem));
	ConstStrW a = args[argPos];
	if (charPos == 0) {
		natural len = a.length();
		if (a[0] == '-') {
			if (len>1) {
				if (a[1] == '-') {
					tmp = CmdLineItem(CmdLineItem::longSwitch,a.offset(2));
					return tmp;
				} else {
					tmp = CmdLineItem(CmdLineItem::shortSwitch,a.mid(1,1));
					return tmp;
				}
			} 
		}
		tmp = CmdLineItem(CmdLineItem::text, a);
		return tmp;
	} else {
		tmp = CmdLineItem(CmdLineItem::shortSwitch,a.mid(charPos,1));
		return tmp;
	}
}
示例#2
0
int main(int argc, char *argv[])
{
    setlocale(LC_ALL, "Russian");

    CmdLineParser parser;
    parser << CmdLineItem("path", true, false, false, "Каталог для поиска дубликатов файлов");

    int result = parser.parse(argc, argv);
    switch(result)
    {
    case CmdLineParser::Error:
        qDebug() << (parser.getLastError() + "\n\n" + parser.getHelpString()).toStdString().c_str();
        return 0;
        break;
    case CmdLineParser::Help:
        qDebug() << parser.getHelpString().toStdString().c_str();
        return 0;
        break;
    }

    QElapsedTimer timer;
    timer.start();


    QString path = parser.at("path")->getValue().at(0);
    qDebug() << "Указанный каталог: " << path;

    QStringList files = Files::countDir(path, QStringList());
    qDebug() << "Найдено файлов: " << files.size();
    qDebug() << "Timer:" << timer.elapsed();

    QVector<MyFileInfo> fileInfoList;

    for(int i = 0 ; i < files.size(); i++)
    {
        fileInfoList.append(MyFileInfo(files[i]));
        fileInfoList.last().calcSize();
    }

    qDebug() << "Посчитаны размеры всех файлов";
    qDebug() << "Timer:" << timer.elapsed();

    qSort(fileInfoList.begin(), fileInfoList.end(), [](const MyFileInfo &_item1, const MyFileInfo &_item2)
    {
        return _item1.getFileSize() < _item2.getFileSize();
    });

    qDebug() << "Массив отсортирован по размеру";
    qDebug() << "Timer:" << timer.elapsed();

    for(int i = 1 ; i < fileInfoList.size(); i++)
    {
        if(fileInfoList[i].getFileSize() == fileInfoList[i - 1].getFileSize())
        {
            if(!fileInfoList[i].isHashPresent()) fileInfoList[i].calcHash();
            if(!fileInfoList[i - 1].isHashPresent()) fileInfoList[i - 1].calcHash();
            if(fileInfoList[i].getHash() == fileInfoList[i - 1].getHash())
            {
                if(fileInfoList[i].compareFiles(fileInfoList[i - 1]))
                {
                    qDebug() << fileInfoList[i].toString();
                    qDebug() << fileInfoList[i - 1].toString();
                    qDebug() << "------------------------\n";
                }
            }
        }
    }

    qDebug() << "Timer:" << timer.elapsed();
    qDebug() << "Завершено";

    return 0;
}