UE4C++ 查找文件 移动文件 删除文件

继承UBlueprintFunctionLibrary

.h

[cpp]  view plain  copy
  1. //查找文件  
  2. UFUNCTION(BlueprintCallable, Category = "ExtendedContent|File")  
  3.     static TArray<FString> FindFiles(FString Path, FString Filter, bool InFiles, bool InDirectory);//3true返回文件,4true返回文件夹  
  4. /**移动文件位置*/  
  5. UFUNCTION(BlueprintCallable, Category = "<span style="font-family:Arial, Helvetica, sans-serif;">ExtendedContent</span>|file")  
  6.     static bool MoveFileTo(FString To, FString From);  
  7. /**删除一个文件*/  
  8. UFUNCTION(BlueprintCallable, Category = "<span style="font-family:Arial, Helvetica, sans-serif;">ExtendedContent</span><span style="font-family:Arial, Helvetica, sans-serif;">|file")</span>  
  9.     static bool DeleteFile(FString FilePath);  

.cpp

[cpp]  view plain  copy
  1. TArray<FString> ULoadTexture::FindFiles(FString Path, FString Filter, bool InFiles, bool InDirectory)  
  2. {  
  3.     TArray<FString> FilePathList;  
  4.     //清空数组  
  5.     FilePathList.Empty();  
  6.     //查找文件并将结果赋给FileList  
  7.     FFileManagerGeneric::Get().FindFilesRecursive(FilePathList, *Path, *Filter, InFiles, InDirectory);  
  8.     //返回结果  
  9.     return FilePathList;  
  10. }  
  11. bool ACPassword::MoveFileTo(FString To, FString From)  
  12. {  
  13.     return IFileManager::Get().Move(*To, *From);  
  14. }  
  15. bool ACPassword::DeleteFile(FString FilePath)  
  16. {  
  17.     return IFileManager::Get().Delete(*FilePath);  
  18. }  


创建文件夹

[cpp]  view plain  copy
  1. bool AMyActor::CreateMyDirectory(const FString& TestDir)  
  2. {  
  3.     // Every function call, unless the function is inline, adds a small  
  4.     // overhead which we can avoid by creating a local variable like so.  
  5.     // But beware of making every function inline!  
  6.     IPlatformFile& PlatformFile = FPlatformFileManager::Get().GetPlatformFile();  
  7.   
  8.     // Directory Exists?  
  9.     if (!PlatformFile.DirectoryExists(*TestDir))  
  10.     {  
  11.         PlatformFile.CreateDirectory(*TestDir);  
  12.         return true;  
  13.     }  
  14.     else  
  15.     {  
  16.         GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Yellow, TEXT("File存在!"));  
  17.         return false;  
  18.     }  
  19. }  


使窗口可拖拽文件

#include "AllowWindowsPlatformTypes.h"
#include "shellapi.h"
#include "HideWindowsPlatformTypes.h"

[cpp]  view plain  copy
  1. HWND hwndd = GetActiveWindow();  
  2. DragAcceptFiles(hwndd, true);  

获取文件大小

[cpp]  view plain  copy
  1. FString AMyActor::GetMyFileSize(FString MyFilePath)  
  2. {  
  3.     if (!FPlatformFileManager::Get().GetPlatformFile().FileExists(*MyFilePath))  
  4.     {  
  5.         GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Yellow, TEXT("Could Not Find File!"));  
  6.         return "0";  
  7.     }  
  8.     const int64 FileSize = FPlatformFileManager::Get().GetPlatformFile().FileSize(*MyFilePath);  
  9.   
  10.     FString Message = FString::Printf(TEXT("File size is: %d"), FileSize);  
  11.     return Message;  
  12. }  

例:查找指定目录下的所有文件

[cpp]  view plain  copy
  1. // 遍历文件夹下指定类型文件  
  2. // Files 保存遍例到的所有文件  
  3. // FilePath 文件夹路径  如 "D:\\MyCodes\\LearnUE4Cpp\\Source\\LearnUE4Cpp\\"  
  4. // Extension 扩展名(文件类型) 如 "*.cpp"  
  5. void UMyBlueprintFunctionLibrary::ScanDirectory(TArray<FString>& Files, const FString & FilePath, const FString& Extension)  
  6. {  
  7.     FString SearchedFiles = FilePath + Extension;  
  8.     TArray<FString> FindedFiles;  
  9.   
  10.     IFileManager::Get().FindFiles(FindedFiles, *SearchedFiles, truefalse);  
  11.   
  12.     FString SearchFile = "";  
  13.   
  14.     for (int i = 0; i < FindedFiles.Num(); i++)  
  15.     {  
  16.         SearchFile = FilePath + FindedFiles[i];  
  17.         Files.Add(SearchFile);  
  18.   
  19.         GEngine->AddOnScreenDebugMessage(-1, 100, FColor::Red, SearchFile);  
  20.     }  
  21.   
  22. }//参考:http://blog.csdn.net/xi_niuniu/article/details/54428027  
[cpp]  view plain  copy
  1. TArray<FString> ALoadPackageMapAsyncActor::GetAllFilesInDirector(const FString directory, const FString onlyFilesStartingWith, const FString extension)  
  2. {  
  3.     FString Directory1 = FPaths::GameDir() + directory;  
  4.     TArray<FString> directoriesToSkip;  
  5.     IPlatformFile &PlatformFile = FPlatformFileManager::Get().GetPlatformFile();  
  6.     FLocalTimestampDirectoryVisitor Visitor(PlatformFile, directoriesToSkip, directoriesToSkip, false);  
  7.     PlatformFile.IterateDirectory(*Directory1, Visitor);  
  8.     TArray<FString> files;  
  9.     for (TMap<FString, FDateTime>::TIterator TimestampIt(Visitor.FileTimes); TimestampIt; ++TimestampIt)  
  10.     {  
  11.         const FString filePath = TimestampIt.Key();  
  12.         const FString fileName = FPaths::GetCleanFilename(filePath);  
  13.         const FString fileBaseName = FPaths::GetBaseFilename(filePath);  
  14.         bool shouldAddFile = true;  
  15.   
  16.         if (!onlyFilesStartingWith.IsEmpty())  
  17.         {  
  18.             const FString left = fileName.Left(onlyFilesStartingWith.Len());  
  19.             if (!(fileName.Left(onlyFilesStartingWith.Len()).Equals(onlyFilesStartingWith)))  
  20.                 shouldAddFile = false;  
  21.         }  
  22.   
  23.         if (!extension.IsEmpty())  
  24.             if (!(FPaths::GetExtension(fileName, false).Equals(extension, ESearchCase::IgnoreCase)))  
  25.                 shouldAddFile = false;  
  26.   
  27.         if (shouldAddFile)  
  28.             files.Add(filePath);  
  29.   
  30.     }  
  31.     if (files.Num() == 0)  
  32.     {  
  33.         GEngine->AddOnScreenDebugMessage(-1, 15.0f, FColor::Yellow, TEXT("no array"));  
  34.     }  
  35.     return files;  
  36. }//参考:http://blog.csdn.net/u012803165/article/details/79034176  
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值