I writing a plugin, with some custom functionality. I try to create a dataasset which stores some data while somebody makes changes in the editor. Its successfully creates the asset and, but when I try to call the UPackage::SavePackage it crashes the whole editor.
Here is the code:
UCoreEventRegistrySubsystem::UCoreEventRegistrySubsystem():UEngineSubsystem() {
UCustomCoreConfig* config = NewObject<UCustomCoreConfig>();
FString packagePath = config->GetRegistryFolderPath().ToString() + "/EventRegistryData"; //The return value of the GetRegistryFolderPath is "/Game/APIConfig/Registry"
this->Package = LoadPackage(nullptr, *packagePath, LOAD_None);
this->Registry = FindObject<UCoreEventRegistry>(this->Package, *FString("EventRegistryData"), true);
if (this->Registry == NULL) {
this->Package = CreatePackage(nullptr, *packagePath);
this->Registry = NewObject<UCoreEventRegistry>(this->Package, UCoreEventRegistry::StaticClass(), *FString("EventRegistryData"), EObjectFlags::RF_Public | EObjectFlags::RF_Standalone);
FAssetRegistryModule::AssetCreated(this->Registry);
}
this->Registry->MarkPackageDirty();
FString assetPath = FPaths::ProjectContentDir()+"APIConfig/Registry/";
FString FilePath = FString::Printf(TEXT("%s%s%s"), *assetPath, *FString("EventRegistryData"), *FPackageName::GetAssetPackageExtension());
if (this->Package != NULL) {
if (this->Registry != NULL) {
UPackage::SavePackage(this->Package, this->Registry, EObjectFlags::RF_Public | EObjectFlags::RF_Standalone, *FilePath, GError, nullptr, true, true, SAVE_NoError);
}
}
}
This is the last line in the log before the crash:
Moving ‘…/…/…/…/…/…/…/Workplace/UE4PluginDev/Saved/EventRegistryDataFA3BB2514DAC96816A94118B46A91AB7.tmp’ to ‘…/…/…/…/…/…/…/Workplace/UE4PluginDev/Content/APIConfig/Registry/EventRegistryData.uasset’
So it seems it crashes while it try to move the temp file to the target director. (I might be wrong though)