// Copyright Epic Games, Inc. All Rights Reserved. #include "FindSourceFileInExplorer.h" #include "Misc/Paths.h" #include "HAL/PlatformProcess.h" namespace UE::AssetTools { void ExecuteFindSourceFileInExplorer(TArray Filenames, TArray OverrideExtensions) { for (TArray::TConstIterator FilenameIter(Filenames); FilenameIter; ++FilenameIter) { const FString CSVFilename = FPaths::ConvertRelativePathToFull(*FilenameIter); const FString RootPath = FPaths::GetPath(CSVFilename); const FString BaseFilename = FPaths::GetBaseFilename(CSVFilename, true); for (TArray::TConstIterator ExtensionItr(OverrideExtensions); ExtensionItr; ++ExtensionItr) { const FString FilenameWithExtension(FString::Printf(TEXT("%s/%s%s"), *RootPath, *BaseFilename, **ExtensionItr)); if (!FilenameWithExtension.IsEmpty() && FPaths::FileExists(*FilenameWithExtension)) { FPlatformProcess::LaunchFileInDefaultExternalApplication(*FilenameWithExtension, nullptr, ELaunchVerb::Edit); break; } } } } bool CanExecuteFindSourceFileInExplorer(TArray Filenames, TArray OverrideExtensions) { // Verify that extensions were provided if (OverrideExtensions.Num() == 0) { return false; } // Verify that the file exists with any of the given extensions for (TArray::TConstIterator FilenameIter(Filenames); FilenameIter; ++FilenameIter) { const FString CSVFilename = FPaths::ConvertRelativePathToFull(*FilenameIter); const FString RootPath = FPaths::GetPath(CSVFilename); const FString BaseFilename = FPaths::GetBaseFilename(CSVFilename, true); for (TArray::TConstIterator ExtensionItr(OverrideExtensions); ExtensionItr; ++ExtensionItr) { const FString FilenameWithExtension(FString::Printf(TEXT("%s/%s%s"), *RootPath, *BaseFilename, **ExtensionItr)); if (!FilenameWithExtension.IsEmpty() && FPaths::FileExists(*FilenameWithExtension)) { return true; } } } return false; } }