Source code

Revision control

Copy as Markdown

Other Tools

// 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)));↩
}↩