Home | History | Annotate | Download | only in Common
      1 // FilePathAutoRename.cpp
      2 
      3 #include "StdAfx.h"
      4 
      5 #include "../../Common/Defs.h"
      6 #include "../../Common/IntToString.h"
      7 
      8 #include "../../Windows/FileFind.h"
      9 
     10 #include "FilePathAutoRename.h"
     11 
     12 using namespace NWindows;
     13 
     14 static bool MakeAutoName(const FString &name,
     15     const FString &extension, UInt32 value, FString &path)
     16 {
     17   char temp[16];
     18   ConvertUInt32ToString(value, temp);
     19   path = name;
     20   path.AddAscii(temp);
     21   path += extension;
     22   return NFile::NFind::DoesFileOrDirExist(path);
     23 }
     24 
     25 bool AutoRenamePath(FString &path)
     26 {
     27   int dotPos = path.ReverseFind_Dot();
     28   int slashPos = path.ReverseFind_PathSepar();
     29 
     30   FString name = path;
     31   FString extension;
     32   if (dotPos > slashPos + 1)
     33   {
     34     name.DeleteFrom(dotPos);
     35     extension = path.Ptr(dotPos);
     36   }
     37   name += FTEXT('_');
     38 
     39   FString temp;
     40 
     41   UInt32 left = 1, right = ((UInt32)1 << 30);
     42   while (left != right)
     43   {
     44     UInt32 mid = (left + right) / 2;
     45     if (MakeAutoName(name, extension, mid, temp))
     46       left = mid + 1;
     47     else
     48       right = mid;
     49   }
     50   return !MakeAutoName(name, extension, right, path);
     51 }
     52