继承UBlueprintFunctionLibrary
.h
//查找文件
UFUNCTION(BlueprintCallable, Category = "ExtendedContent|File")
static TArray<FString> FindFiles(FString Path, FString Filter, bool InFiles, bool InDirectory);//3true返回文件,4true返回文件夹
/**移动文件位置*/
UFUNCTION(BlueprintCallable, Category = "ExtendedContent|file")
static bool MoveFileTo(FString To, FString From);
/**删除一个文件*/
UFUNCTION(BlueprintCallable, Category = "ExtendedContent|file")
static bool DeleteFile(FString FilePath);
.cpp
TArray<FString> ULoadTexture::FindFiles(FString Path, FString Filter, bool InFiles, bool InDirectory)
{
TArray<FString> FilePathList;
//清空数组
FilePathList.Empty();
//查找文件并将结果赋给FileList
FFileManagerGeneric::Get().FindFilesRecursive(FilePathList, *Path, *Filter, InFiles, InDirectory);
//返回结果
return FilePathList;
}
bool ACPassword::MoveFileTo(FString To, FString From)
{
return IFileManager::Get().Move(*To, *From);
}
bool ACPassword::DeleteFile(FString FilePath)
{
return IFileManager::Get().Delete(*FilePath);
}
复制文件
FPlatformFileManager::Get().GetPlatformFile().CopyFile(*To, *From);
IFileManager::Get().Copy(*To, *From);
创建文件夹
bool AMyActor::CreateMyDirectory(const FString& TestDir)
{
// Every function call, unless the function is inline, adds a small
// overhead which we can avoid by creating a local variable like so.
// But beware of making every function inline!
IPlatformFile& PlatformFile = FPlatformFileManager::Get().GetPlatformFile();
// Directory Exists?
if (!PlatformFile.DirectoryExists(*TestDir))
{
PlatformFile.CreateDirectory(*TestDir);
return true;
}
else
{
GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Yellow, TEXT("File存在!"));
return false;
}
}
删除文件夹
IPlatformFile &PlatformFile = FPlatformFileManager::Get().GetPlatformFile();
PlatFileModule.DeleteDirectoryRecursively(*(CurFilePath));
获取文件大小
FString AMyActor::GetMyFileSize(FString MyFilePath)
{
if (!FPlatformFileManager::Get().GetPlatformFile().FileExists(*MyFilePath))
{
GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Yellow, TEXT("Could Not Find File!"));
return "0";
}
const int64 FileSize = FPlatformFileManager::Get().GetPlatformFile().FileSize(*MyFilePath);
FString Message = FString::Printf(TEXT("File size is: %d"), FileSize);
return Message;
}
写入读取TXT
.h
UFUNCTION(BlueprintCallable, Category = "save")
static bool FileSaveString(FString SaveTextB, FString FileNameB);
UFUNCTION(BlueprintCallable, Category = "save")
static bool FileLoadString(FString FileNameA, FString& SaveTextA );
.cpp
bool AMyActor::FileSaveString(FString SaveTextB, FString FileNameB)
{
return FFileHelper::SaveStringToFile(SaveTextB, *(FPaths::GameDir() + FileNameB));
}
bool AMyActor::FileLoadString(FString FileNameA, FString& SaveTextA)
{
return FFileHelper::LoadFileToString(SaveTextA, *(FPaths::GameDir() + FileNameA));
}
查找指定目录下的所有文件夹
TArray<FString> UToolLibrary::GetAllDirectorysInPath(const FString& Path)
{
TArray<FString> FoundFolders;
if (FPaths::DirectoryExists(Path))
{
FFileManagerGeneric::Get().FindFilesRecursive(FoundFolders, *Path, TEXT("*"), false, true, true);
}
return FoundFolders;
例:查找指定目录下的所有文件
// 遍历文件夹下指定类型文件
// Files 保存遍例到的所有文件
// FilePath 文件夹路径 如 "D:\\MyCodes\\LearnUE4Cpp\\Source\\LearnUE4Cpp\\"
// Extension 扩展名(文件类型) 如 "*.cpp"
void UMyBlueprintFunctionLibrary::ScanDirectory(TArray<FString>& Files, const FString & FilePath, const FString& Extension)
{
FString SearchedFiles = FilePath + Extension;
TArray<FString> FindedFiles;
IFileManager::Get().FindFiles(FindedFiles, *SearchedFiles, true, false);
FString SearchFile = "";
for (int i = 0; i < FindedFiles.Num(); i++)
{
SearchFile = FilePath + FindedFiles[i];
Files.Add(SearchFile);
GEngine->AddOnScreenDebugMessage(-1, 100, FColor::Red, SearchFile);
}
}//参考:http://blog.csdn.net/xi_niuniu/article/details/54428027
//如果需要递归查找所有文件使用
IPlatformFile& fileManager = FPlatformFileManager::Get().GetPlatformFile();
fileManager.FindFilesRecursively(FindedFiles, *SearchedFiles, *Extension);
//"path","","png"
TArray<FString> ALoadPackageMapAsyncActor::GetAllFilesInDirector(const FString directory, const FString onlyFilesStartingWith, const FString extension)
{
FString Directory1 = FPaths::GameDir() + directory;
TArray<FString> directoriesToSkip;
IPlatformFile &PlatformFile = FPlatformFileManager::Get().GetPlatformFile();
FLocalTimestampDirectoryVisitor Visitor(PlatformFile, directoriesToSkip, directoriesToSkip, false);
PlatformFile.IterateDirectory(*Directory1, Visitor);
TArray<FString> files;
for (TMap<FString, FDateTime>::TIterator TimestampIt(Visitor.FileTimes); TimestampIt; ++TimestampIt)
{
const FString filePath = TimestampIt.Key();
const FString fileName = FPaths::GetCleanFilename(filePath);
const FString fileBaseName = FPaths::GetBaseFilename(filePath);
bool shouldAddFile = true;
if (!onlyFilesStartingWith.IsEmpty())
{
const FString left = fileName.Left(onlyFilesStartingWith.Len());
if (!(fileName.Left(onlyFilesStartingWith.Len()).Equals(onlyFilesStartingWith)))
shouldAddFile = false;
}
if (!extension.IsEmpty())
if (!(FPaths::GetExtension(fileName, false).Equals(extension, ESearchCase::IgnoreCase)))
shouldAddFile = false;
if (shouldAddFile)
files.Add(filePath);
}
if (files.Num() == 0)
{
GEngine->AddOnScreenDebugMessage(-1, 15.0f, FColor::Yellow, TEXT("no array"));
}
return files;
}//参考:http://blog.csdn.net/u012803165/article/details/79034176
TArray<FString> ULoaderBPFunctionLibrary::GetAllFilesInDirectory(const FString directory, const bool fullPath, const bool withoutExtention, const FString onlyFilesStartingWith, const FString onlyFilesWithExtension)
{
// Get all files in directory
TArray<FString> directoriesToSkip;
IPlatformFile &PlatformFile = FPlatformFileManager::Get().GetPlatformFile();
FLocalTimestampDirectoryVisitor Visitor(PlatformFile, directoriesToSkip, directoriesToSkip, false);
PlatformFile.IterateDirectory(*directory, Visitor);
TArray<FString> files;
for (TMap<FString, FDateTime>::TIterator TimestampIt(Visitor.FileTimes); TimestampIt; ++TimestampIt)
{
const FString filePath = TimestampIt.Key();
const FString fileName = FPaths::GetCleanFilename(filePath);
bool shouldAddFile = true;
if (!onlyFilesStartingWith.IsEmpty())
{
const FString left = fileName.Left(onlyFilesStartingWith.Len());
if (!(fileName.Left(onlyFilesStartingWith.Len()).Equals(onlyFilesStartingWith)))
shouldAddFile = false;
}
if (!onlyFilesWithExtension.IsEmpty())
{
if (!(FPaths::GetExtension(fileName, false).Equals(onlyFilesWithExtension, ESearchCase::IgnoreCase)))
shouldAddFile = false;
}
if (shouldAddFile)
{
if (withoutExtention)
files.Add(fullPath ? filePath : FPaths::GetBaseFilename(filePath));
else
files.Add(fullPath ? filePath : FPaths::GetCleanFilename(filePath));
}
}
return files;
}
查看文件修改时间
FDataTime AMyActor::GetFileModifyDate(FString Path)
{
IFileManager& m_FilelManager = IFileManager::Get();
return m_FilelManager.GetTimeStamp(*Path);
}
复制文件夹
#define LOCTEXT_NAMESPACE "UECppTest"
void AMyActor::CopyFileTo(FString FromFolder, FString DestinationFolder)
{
TArray<FString> FindedFiles;
IPlatformFile& fileManager = FPlatformFileManager::Get().GetPlatformFile();
fileManager.FindFilesRecursively(FindedFiles, *FromFolder, nullptr);
bool bUserCanceled = false;
EAppReturnType::Type LastResponse = EAppReturnType::Yes;
TArray<FString> SuccessfullyCopiedFiles;
TArray<FString> SuccessfullyCopiedPackages;
FString CopyErrors;
//进度条
//FScopedSlowTask SlowTask(2, LOCTEXT("MigratePackages_CopyingFiles", "Copying Files..."));
//SlowTask.MakeDialog();
//SlowTask.EnterProgressFrame();
//{
// FScopedSlowTask LoopProgress(FindedFiles.Num());
//所有文件
for (auto PackageNameIt = FindedFiles.CreateConstIterator(); PackageNameIt; ++PackageNameIt)
{
//LoopProgress.EnterProgressFrame();//进度条
const FString& PackageName = *PackageNameIt;
const FString RootPath = L"C:\\Users\\Administrator\\Desktop";
FString SrcFilename = PackageName;
const FString DestFilename = SrcFilename.Replace(*RootPath, *DestinationFolder);
bool bFileOKToCopy = true;
if (IFileManager::Get().FileSize(*PackageName) > 0)
{
if (IFileManager::Get().FileExists(*DestFilename))
{
// The destination file already exists! Ask the user what to do.
EAppReturnType::Type Response;
if (LastResponse == EAppReturnType::YesAll || LastResponse == EAppReturnType::NoAll)
{
Response = LastResponse;
}
else
{
const FText Message = FText::Format(LOCTEXT("MigratePackages_AlreadyExists", "An asset already exists at location {0} would you like to overwrite it?"), FText::FromString(DestFilename));
//FString Message = FString::Printf(TEXT("An asset already exists at location %s would you like to overwrite it?"), DestFilename);
//FString Message = TEXT("An asset already exists at location %s would you like to overwrite it?"), DestFilename;
Response = FMessageDialog::Open(EAppMsgType::YesNoYesAllNoAllCancel, (Message));
if (Response == EAppReturnType::Cancel)
{
// The user chose to cancel mid-operation. Break out.
bUserCanceled = true;
break;
}
LastResponse = Response;
}
const bool bWantOverwrite = Response == EAppReturnType::Yes || Response == EAppReturnType::YesAll;
if (!bWantOverwrite)
{
// User chose not to replace the package
bFileOKToCopy = false;
}
}
}
if (bFileOKToCopy)
{
if (IFileManager::Get().Copy(*DestFilename, *SrcFilename) == COPY_OK)
{
SuccessfullyCopiedPackages.Add(PackageName);
SuccessfullyCopiedFiles.Add(DestFilename);
//UE_LOG(LogTemp, Warning, TEXT("Failed to copy %s to %s while migrating assets"), *SrcFilename, *DestFilename);
}
else
{
UE_LOG(LogTemp, Warning, TEXT("Failed to copy %s to %s while migrating assets"), *SrcFilename, *DestFilename);
CopyErrors += SrcFilename + LINE_TERMINATOR;
}
}
}
//提示信息
FMessageLog MigrateLog("AssetTools");
FText LogMessage = FText::FromString(TEXT("Content migration completed successfully!"));
EMessageSeverity::Type Severity = EMessageSeverity::Info;
MigrateLog.Notify(LogMessage, Severity, true);
}
#undef LOCTEXT_NAMESPACE
复制文件夹2
return FPlatformFileManager::Get().GetPlatformFile().CopyDirectoryTree(*To, *From, true);