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