Merge pull request #339 from diamante0018/fix/recover-from-filesystem-ex

Recover from filesystem exception when dumping
This commit is contained in:
Jan 2025-01-11 12:37:10 +01:00 committed by GitHub
commit 27c01e0a41
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 15 additions and 4 deletions

View File

@ -1,6 +1,7 @@
#include "AssetDumpingContext.h"
#include <filesystem>
#include <format>
#include <fstream>
AssetDumpingContext::AssetDumpingContext()
@ -15,13 +16,21 @@ std::unique_ptr<std::ostream> AssetDumpingContext::OpenAssetFile(const std::stri
auto assetFileFolder(assetFilePath);
assetFileFolder.replace_filename("");
create_directories(assetFileFolder);
std::error_code ec;
std::filesystem::create_directories(assetFileFolder, ec);
if (ec)
{
std::cerr << std::format("Failed to create folder '{}'. Asset '{}' won't be dumped\n", assetFilePath.string(), fileName);
return nullptr;
}
auto file = std::make_unique<std::ofstream>(assetFilePath, std::fstream::out | std::fstream::binary);
if (!file->is_open())
{
std::cout << "Failed to open file '" << assetFilePath.string() << "' to dump asset '" << fileName << "'\n";
std::cerr << std::format("Failed to open file '{}' to dump asset '{}'\n", assetFilePath.string(), fileName);
return nullptr;
}

View File

@ -1,5 +1,6 @@
#include "AssetDumperRawFile.h"
#include <format>
#include <stdexcept>
#include <zlib.h>
@ -49,7 +50,7 @@ void AssetDumperRawFile::DumpAsset(AssetDumpingContext& context, XAssetInfo<RawF
if (ret < 0)
{
printf("Inflate failed for dumping rawfile '%s'\n", rawFile->name);
std::cerr << std::format("Inflate failed when attempting to dump rawfile '{}'\n", rawFile->name);
inflateEnd(&zs);
return;
}

View File

@ -1,5 +1,6 @@
#include "AssetDumperRawFile.h"
#include <format>
#include <stdexcept>
#include <zlib.h>
@ -49,7 +50,7 @@ void AssetDumperRawFile::DumpAsset(AssetDumpingContext& context, XAssetInfo<RawF
if (ret < 0)
{
std::cerr << "Inflate failed when attempting to dump rawfile " << rawFile->name << "\n";
std::cerr << std::format("Inflate failed when attempting to dump rawfile '{}'\n", rawFile->name);
inflateEnd(&zs);
return;
}