Glad to know some one here working with point cloud as well.
In this case, SaveStringArrayToFile may not suit for handling huge size of array, since that is 32 bits version and be limited by max length of FString which is int32.
Hope the code like below could help.
#include "FileManager.h"
void UMyBlueprintFunctionLibrary::WriteExcerptDataIntoFile(FString FileSource, TArray<FVector> InExcerptData)
{
FText CheckoutFailReason;
bool bNewFile = true;
bool bCheckoutOrAddSucceeded = true;
if (FPaths::FileExists(FileSource))
{
// Check out the existing file
bNewFile = false;
}
FArchive* FileWriter = IFileManager::Get().CreateFileWriter(*FileSource, EFileWrite::FILEWRITE_Append | EFileWrite::FILEWRITE_AllowRead | EFileWrite::FILEWRITE_EvenIfReadOnly);
if (bNewFile)
{
FString FileHeader;
FileHeader += "Start Recording:";
FileHeader += LINE_TERMINATOR;
FileWriter->Serialize(TCHAR_TO_ANSI(*FileHeader), FileHeader.Len());
}
else
{
FileWriter->Seek(FMath::Max(FileWriter->TotalSize(), (int64)0));
}
int TotalNum = InExcerptData.Num();
int Count = 0;
int StepNum = 100;
while (Count < TotalNum)
{
FString NewExcerpt;
for (int i = 0; i < StepNum; i++)
{
FVector& Vec = InExcerptData[Count];
NewExcerpt += FString::Printf(TEXT("Vec:%f,%f,%f
"), Vec.X, Vec.Y, Vec.Z);
Count++;
}
FileWriter->Serialize(TCHAR_TO_ANSI(*NewExcerpt), NewExcerpt.Len());
}
FileWriter->Close();
delete FileWriter;
return;
}