FString FPackageName::FilenameToLongPackageName(const FString& InFilename) { FString Result = InternalFilenameToLongPackageName(InFilename); // we don't support loading packages from outside of well defined places const bool bContainsDot = Result.Contains(TEXT(".")); const bool bContainsBackslash = Result.Contains(TEXT("\\")); const bool bContainsColon = Result.Contains(TEXT(":")); if (bContainsDot || bContainsBackslash || bContainsColon) { FString InvalidChars; if (bContainsDot) { InvalidChars += TEXT("."); } if (bContainsBackslash) { InvalidChars += TEXT("\\"); } if (bContainsColon) { InvalidChars += TEXT(":"); } UE_LOG(LogPackageName, Fatal,TEXT("FilenameToLongPackageName failed to convert '%s'. Attempt result was '%s', but the path contains illegal characters '%s'"), *InFilename, *Result, *InvalidChars); } return Result; }
bool FPackageName::TryConvertFilenameToLongPackageName(const FString& InFilename, FString& OutPackageName, FString* OutFailureReason) { FString LongPackageName = InternalFilenameToLongPackageName(InFilename); // we don't support loading packages from outside of well defined places const bool bContainsDot = LongPackageName.Contains(TEXT("."), ESearchCase::CaseSensitive); const bool bContainsBackslash = LongPackageName.Contains(TEXT("\\"), ESearchCase::CaseSensitive); const bool bContainsColon = LongPackageName.Contains(TEXT(":"), ESearchCase::CaseSensitive); const bool bResult = !(bContainsDot || bContainsBackslash || bContainsColon); if (bResult) { OutPackageName = MoveTemp(LongPackageName); } else if (OutFailureReason != nullptr) { FString InvalidChars; if (bContainsDot) { InvalidChars += TEXT("."); } if (bContainsBackslash) { InvalidChars += TEXT("\\"); } if (bContainsColon) { InvalidChars += TEXT(":"); } *OutFailureReason = FString::Printf(TEXT("FilenameToLongPackageName failed to convert '%s'. Attempt result was '%s', but the path contains illegal characters '%s'"), *InFilename, *LongPackageName, *InvalidChars); } return bResult; }
bool FPackageName::TryConvertFilenameToLongPackageName(const FString& InFilename, FString& OutPackageName) { FString Result = InternalFilenameToLongPackageName(InFilename); // we don't support loading packages from outside of well defined places if (Result.Contains(TEXT(".")) || Result.Contains(TEXT("\\")) || Result.Contains(TEXT(":"))) { return false; } OutPackageName = MoveTemp(Result); return true; }