1 // ArchiveName.cpp 2 3 #include "StdAfx.h" 4 5 #include "../../../Windows/FileDir.h" 6 #include "../../../Windows/FileName.h" 7 8 #include "ExtractingFilePath.h" 9 #include "ArchiveName.h" 10 11 using namespace NWindows; 12 using namespace NFile; 13 14 UString CreateArchiveName(const NFind::CFileInfo &fi, bool keepName) 15 { 16 FString resultName = fi.Name; 17 if (!fi.IsDir() && !keepName) 18 { 19 int dotPos = resultName.ReverseFind_Dot(); 20 if (dotPos > 0) 21 { 22 FString archiveName2 = resultName.Left(dotPos); 23 if (archiveName2.ReverseFind_Dot() < 0) 24 resultName = archiveName2; 25 } 26 } 27 return Get_Correct_FsFile_Name(fs2us(resultName)); 28 } 29 30 static FString CreateArchiveName2(const FString &path, bool fromPrev, bool keepName) 31 { 32 FString resultName = FTEXT("Archive"); 33 if (fromPrev) 34 { 35 FString dirPrefix; 36 if (NDir::GetOnlyDirPrefix(path, dirPrefix)) 37 { 38 if (!dirPrefix.IsEmpty() && IsPathSepar(dirPrefix.Back())) 39 { 40 #if defined(_WIN32) && !defined(UNDER_CE) 41 if (NName::IsDriveRootPath_SuperAllowed(dirPrefix)) 42 resultName = dirPrefix[dirPrefix.Len() - 3]; // only letter 43 else 44 #endif 45 { 46 dirPrefix.DeleteBack(); 47 NFind::CFileInfo fi; 48 if (fi.Find(dirPrefix)) 49 resultName = fi.Name; 50 } 51 } 52 } 53 } 54 else 55 { 56 NFind::CFileInfo fi; 57 if (fi.Find(path)) 58 { 59 resultName = fi.Name; 60 if (!fi.IsDir() && !keepName) 61 { 62 int dotPos = resultName.ReverseFind_Dot(); 63 if (dotPos > 0) 64 { 65 FString name2 = resultName.Left(dotPos); 66 if (name2.ReverseFind_Dot() < 0) 67 resultName = name2; 68 } 69 } 70 } 71 } 72 return resultName; 73 } 74 75 UString CreateArchiveName(const UString &path, bool fromPrev, bool keepName) 76 { 77 return Get_Correct_FsFile_Name(fs2us(CreateArchiveName2(us2fs(path), fromPrev, keepName))); 78 } 79