Files
UnrealEngine/Engine/Source/Developer/AssetTools/Private/FindSourceFileInExplorer.cpp
2025-05-18 13:04:45 +08:00

58 lines
2.0 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "FindSourceFileInExplorer.h"
#include "Misc/Paths.h"
#include "HAL/PlatformProcess.h"
namespace UE::AssetTools
{
void ExecuteFindSourceFileInExplorer(TArray<FString> Filenames, TArray<FString> OverrideExtensions)
{
for (TArray<FString>::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<FString>::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<FString> Filenames, TArray<FString> 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<FString>::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<FString>::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;
}
}