示例#1
0
	// Перименовываем, добавляя _2 к имени файла.
	TString GetNewNameForFileAdd(const TPath &oldPath)
    {
		TString uniquePath;
		const int SIMILAR_PREFIX_SIZE = 16;
		const TChar *SIMILAR_PREFIX_FORMAT = TEXT("_%u");
		TChar buffer[SIMILAR_PREFIX_SIZE];
		unsigned long counter = 2;

		do 
		{
			_stprintf_s(buffer, SIMILAR_PREFIX_FORMAT, counter++);
			uniquePath = CreatePath(oldPath.GetDirectory(), oldPath.GetName(false) + TString(buffer) + oldPath.GetExtension());
		} 
		while (IsFileExists(uniquePath.c_str()));

        return uniquePath;
    }
示例#2
0
	// Ищет цифры в имени файла с конца.
	__int64 GetDigitInFileName(const TPath &path, TString & nameWithoutDigit, size_t & leadingZeros)
	{
		TString name = path.GetName(false);
		size_t length = name.length();
        //Находим первый не числовой символ с конца
        bool canRename;
        size_t digitPos = length;

		for (ptrdiff_t i = length - 1; i >= 0; digitPos = i, i-- )
        {
            if (!iswdigit(name[i])) //если не цифра выходим
                break;
        }

        if (digitPos <= length - 1) //если цифра найдена
            canRename = true;
        else
            canRename = false;

		__int64 result = -1;
        int numOfZero = 0;
        if (canRename)
        {
			TString forParsing = name.substr(digitPos, length - digitPos);
			result = _wtoi64(forParsing.c_str());
			if (result == _I64_MAX) //слишком длинный
			{
				digitPos = 0;
				result = -1;
			}
            leadingZeros = forParsing.length() - LengthOfLong(result);
        }

		if (digitPos > 0 && digitPos < length)
            nameWithoutDigit = name.substr(0, digitPos);
        else
            nameWithoutDigit = TString();
        return result;
	}