void FMacErrorReport::FindMostRecentErrorReports(TArray<FString>& ErrorReportPaths, const FTimespan& MaxCrashReportAge) { auto& PlatformFile = FPlatformFileManager::Get().GetPlatformFile(); FDateTime MinCreationTime = FDateTime::Now() - MaxCrashReportAge; auto ReportFinder = MakeDirectoryVisitor([&](const TCHAR* FilenameOrDirectory, bool bIsDirectory) { if (bIsDirectory) { auto TimeStamp = PlatformFile.GetTimeStamp(FilenameOrDirectory); if (TimeStamp > MinCreationTime) { ErrorReportPaths.Add(FilenameOrDirectory); } } return true; }); FString AllReportsDirectory = FPaths::GameAgnosticSavedDir() / TEXT("Crashes"); PlatformFile.IterateDirectory( *AllReportsDirectory, ReportFinder); ErrorReportPaths.Sort([&](const FString& L, const FString& R) { auto TimeStampL = PlatformFile.GetTimeStamp(*L); auto TimeStampR = PlatformFile.GetTimeStamp(*R); return TimeStampL > TimeStampR; }); }
void FWindowsErrorReport::FindMostRecentErrorReports(TArray<FString>& ErrorReportPaths, const FTimespan& MaxCrashReportAge) { auto& PlatformFile = FPlatformFileManager::Get().GetPlatformFile(); FDateTime MinCreationTime = FDateTime::UtcNow() - MaxCrashReportAge; auto ReportFinder = MakeDirectoryVisitor([&](const TCHAR* FilenameOrDirectory, bool bIsDirectory) { if (bIsDirectory) { FDateTime CreationTime; if (TryGetDirectoryCreationTimeUtc(FilenameOrDirectory, CreationTime) && CreationTime > MinCreationTime && FCString::Strstr(FilenameOrDirectory, TEXT("UE4-"))) { ErrorReportPaths.Add(FilenameOrDirectory); } } return true; }); { TCHAR LocalAppDataPath[MAX_PATH]; SHGetFolderPath(0, CSIDL_LOCAL_APPDATA, NULL, 0, LocalAppDataPath); PlatformFile.IterateDirectory(*(FString(LocalAppDataPath) / TEXT("Microsoft/Windows/WER/ReportQueue")), ReportFinder); } if (ErrorReportPaths.Num() == 0) { TCHAR LocalAppDataPath[MAX_PATH]; SHGetFolderPath( 0, CSIDL_COMMON_APPDATA, NULL, 0, LocalAppDataPath ); PlatformFile.IterateDirectory( *(FString( LocalAppDataPath ) / TEXT( "Microsoft/Windows/WER/ReportQueue" )), ReportFinder ); } ErrorReportPaths.Sort([](const FString& L, const FString& R) { FDateTime CreationTimeL; TryGetDirectoryCreationTimeUtc(L, CreationTimeL); FDateTime CreationTimeR; TryGetDirectoryCreationTimeUtc(R, CreationTimeR); return CreationTimeL > CreationTimeR; }); }