// ArchiveName.cpp #include "StdAfx.h" #include "../../../Windows/FileDir.h" #include "../../../Windows/FileName.h" #include "ExtractingFilePath.h" #include "ArchiveName.h" using namespace NWindows; using namespace NFile; UString CreateArchiveName(const NFind::CFileInfo &fi, bool keepName) { FString resultName = fi.Name; if (!fi.IsDir() && !keepName) { int dotPos = resultName.ReverseFind_Dot(); if (dotPos > 0) { FString archiveName2 = resultName.Left(dotPos); if (archiveName2.ReverseFind_Dot() < 0) resultName = archiveName2; } } return Get_Correct_FsFile_Name(fs2us(resultName)); } static FString CreateArchiveName2(const FString &path, bool fromPrev, bool keepName) { FString resultName ("Archive"); if (fromPrev) { FString dirPrefix; if (NDir::GetOnlyDirPrefix(path, dirPrefix)) { if (!dirPrefix.IsEmpty() && IsPathSepar(dirPrefix.Back())) { #if defined(_WIN32) && !defined(UNDER_CE) if (NName::IsDriveRootPath_SuperAllowed(dirPrefix)) resultName = dirPrefix[dirPrefix.Len() - 3]; // only letter else #endif { dirPrefix.DeleteBack(); NFind::CFileInfo fi; if (fi.Find(dirPrefix)) resultName = fi.Name; } } } } else { NFind::CFileInfo fi; if (fi.Find(path)) { resultName = fi.Name; if (!fi.IsDir() && !keepName) { int dotPos = resultName.ReverseFind_Dot(); if (dotPos > 0) { FString name2 = resultName.Left(dotPos); if (name2.ReverseFind_Dot() < 0) resultName = name2; } } } } return resultName; } UString CreateArchiveName(const UString &path, bool fromPrev, bool keepName) { return Get_Correct_FsFile_Name(fs2us(CreateArchiveName2(us2fs(path), fromPrev, keepName))); }