1baa3858d3f5d128a5c8466b700098109edcad5f2repo sync// FilePathAutoRename.cpp 2baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 3baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#include "StdAfx.h" 4baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 5baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#include "Common/Defs.h" 6baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#include "Common/IntToString.h" 7baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 8baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#include "Windows/FileFind.h" 9baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 10baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#include "FilePathAutoRename.h" 11baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 12baa3858d3f5d128a5c8466b700098109edcad5f2repo syncusing namespace NWindows; 13baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 14baa3858d3f5d128a5c8466b700098109edcad5f2repo syncstatic bool MakeAutoName(const UString &name, 15baa3858d3f5d128a5c8466b700098109edcad5f2repo sync const UString &extension, unsigned value, UString &path) 16baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{ 17baa3858d3f5d128a5c8466b700098109edcad5f2repo sync wchar_t number[16]; 18baa3858d3f5d128a5c8466b700098109edcad5f2repo sync ConvertUInt32ToString(value, number); 19baa3858d3f5d128a5c8466b700098109edcad5f2repo sync path = name; 20baa3858d3f5d128a5c8466b700098109edcad5f2repo sync path += number; 21baa3858d3f5d128a5c8466b700098109edcad5f2repo sync path += extension; 22baa3858d3f5d128a5c8466b700098109edcad5f2repo sync return NFile::NFind::DoesFileOrDirExist(path); 23baa3858d3f5d128a5c8466b700098109edcad5f2repo sync} 24baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 25baa3858d3f5d128a5c8466b700098109edcad5f2repo syncbool AutoRenamePath(UString &fullProcessedPath) 26baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{ 27baa3858d3f5d128a5c8466b700098109edcad5f2repo sync UString path; 28baa3858d3f5d128a5c8466b700098109edcad5f2repo sync int dotPos = fullProcessedPath.ReverseFind(L'.'); 29baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 30baa3858d3f5d128a5c8466b700098109edcad5f2repo sync int slashPos = fullProcessedPath.ReverseFind(L'/'); 31baa3858d3f5d128a5c8466b700098109edcad5f2repo sync #ifdef _WIN32 32baa3858d3f5d128a5c8466b700098109edcad5f2repo sync int slash1Pos = fullProcessedPath.ReverseFind(L'\\'); 33baa3858d3f5d128a5c8466b700098109edcad5f2repo sync slashPos = MyMax(slashPos, slash1Pos); 34baa3858d3f5d128a5c8466b700098109edcad5f2repo sync #endif 35baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 36baa3858d3f5d128a5c8466b700098109edcad5f2repo sync UString name, extension; 37baa3858d3f5d128a5c8466b700098109edcad5f2repo sync if (dotPos > slashPos && dotPos > 0) 38baa3858d3f5d128a5c8466b700098109edcad5f2repo sync { 39baa3858d3f5d128a5c8466b700098109edcad5f2repo sync name = fullProcessedPath.Left(dotPos); 40baa3858d3f5d128a5c8466b700098109edcad5f2repo sync extension = fullProcessedPath.Mid(dotPos); 41baa3858d3f5d128a5c8466b700098109edcad5f2repo sync } 42baa3858d3f5d128a5c8466b700098109edcad5f2repo sync else 43baa3858d3f5d128a5c8466b700098109edcad5f2repo sync name = fullProcessedPath; 44baa3858d3f5d128a5c8466b700098109edcad5f2repo sync name += L'_'; 45baa3858d3f5d128a5c8466b700098109edcad5f2repo sync unsigned left = 1, right = (1 << 30); 46baa3858d3f5d128a5c8466b700098109edcad5f2repo sync while (left != right) 47baa3858d3f5d128a5c8466b700098109edcad5f2repo sync { 48baa3858d3f5d128a5c8466b700098109edcad5f2repo sync unsigned mid = (left + right) / 2; 49baa3858d3f5d128a5c8466b700098109edcad5f2repo sync if (MakeAutoName(name, extension, mid, path)) 50baa3858d3f5d128a5c8466b700098109edcad5f2repo sync left = mid + 1; 51baa3858d3f5d128a5c8466b700098109edcad5f2repo sync else 52baa3858d3f5d128a5c8466b700098109edcad5f2repo sync right = mid; 53baa3858d3f5d128a5c8466b700098109edcad5f2repo sync } 54baa3858d3f5d128a5c8466b700098109edcad5f2repo sync return !MakeAutoName(name, extension, right, fullProcessedPath); 55baa3858d3f5d128a5c8466b700098109edcad5f2repo sync} 56