1*f6dc9357SAndroid Build Coastguard Worker // FilePathAutoRename.cpp
2*f6dc9357SAndroid Build Coastguard Worker
3*f6dc9357SAndroid Build Coastguard Worker #include "StdAfx.h"
4*f6dc9357SAndroid Build Coastguard Worker
5*f6dc9357SAndroid Build Coastguard Worker #include "../../Windows/FileFind.h"
6*f6dc9357SAndroid Build Coastguard Worker
7*f6dc9357SAndroid Build Coastguard Worker #include "FilePathAutoRename.h"
8*f6dc9357SAndroid Build Coastguard Worker
9*f6dc9357SAndroid Build Coastguard Worker using namespace NWindows;
10*f6dc9357SAndroid Build Coastguard Worker
MakeAutoName(const FString & name,const FString & extension,UInt32 value,FString & path)11*f6dc9357SAndroid Build Coastguard Worker static bool MakeAutoName(const FString &name,
12*f6dc9357SAndroid Build Coastguard Worker const FString &extension, UInt32 value, FString &path)
13*f6dc9357SAndroid Build Coastguard Worker {
14*f6dc9357SAndroid Build Coastguard Worker path = name;
15*f6dc9357SAndroid Build Coastguard Worker path.Add_UInt32(value);
16*f6dc9357SAndroid Build Coastguard Worker path += extension;
17*f6dc9357SAndroid Build Coastguard Worker return NFile::NFind::DoesFileOrDirExist(path);
18*f6dc9357SAndroid Build Coastguard Worker }
19*f6dc9357SAndroid Build Coastguard Worker
AutoRenamePath(FString & path)20*f6dc9357SAndroid Build Coastguard Worker bool AutoRenamePath(FString &path)
21*f6dc9357SAndroid Build Coastguard Worker {
22*f6dc9357SAndroid Build Coastguard Worker const int dotPos = path.ReverseFind_Dot();
23*f6dc9357SAndroid Build Coastguard Worker const int slashPos = path.ReverseFind_PathSepar();
24*f6dc9357SAndroid Build Coastguard Worker
25*f6dc9357SAndroid Build Coastguard Worker FString name = path;
26*f6dc9357SAndroid Build Coastguard Worker FString extension;
27*f6dc9357SAndroid Build Coastguard Worker if (dotPos > slashPos + 1)
28*f6dc9357SAndroid Build Coastguard Worker {
29*f6dc9357SAndroid Build Coastguard Worker name.DeleteFrom((unsigned)dotPos);
30*f6dc9357SAndroid Build Coastguard Worker extension = path.Ptr((unsigned)dotPos);
31*f6dc9357SAndroid Build Coastguard Worker }
32*f6dc9357SAndroid Build Coastguard Worker name.Add_Char('_');
33*f6dc9357SAndroid Build Coastguard Worker
34*f6dc9357SAndroid Build Coastguard Worker FString temp;
35*f6dc9357SAndroid Build Coastguard Worker
36*f6dc9357SAndroid Build Coastguard Worker UInt32 left = 1, right = (UInt32)1 << 30;
37*f6dc9357SAndroid Build Coastguard Worker while (left != right)
38*f6dc9357SAndroid Build Coastguard Worker {
39*f6dc9357SAndroid Build Coastguard Worker const UInt32 mid = (left + right) / 2;
40*f6dc9357SAndroid Build Coastguard Worker if (MakeAutoName(name, extension, mid, temp))
41*f6dc9357SAndroid Build Coastguard Worker left = mid + 1;
42*f6dc9357SAndroid Build Coastguard Worker else
43*f6dc9357SAndroid Build Coastguard Worker right = mid;
44*f6dc9357SAndroid Build Coastguard Worker }
45*f6dc9357SAndroid Build Coastguard Worker return !MakeAutoName(name, extension, right, path);
46*f6dc9357SAndroid Build Coastguard Worker }
47