diff --git a/include/miniocpp/args.h b/include/miniocpp/args.h index d1c4d12..46db3de 100644 --- a/include/miniocpp/args.h +++ b/include/miniocpp/args.h @@ -18,6 +18,7 @@ #ifndef MINIO_CPP_ARGS_H_INCLUDED #define MINIO_CPP_ARGS_H_INCLUDED +#include #include #include #include @@ -192,7 +193,7 @@ using StatObjectArgs = ObjectConditionalReadArgs; using RemoveObjectArgs = ObjectVersionArgs; struct DownloadObjectArgs : public ObjectReadArgs { - std::string filename; + std::filesystem::path filename; bool overwrite; http::ProgressFunction progressfunc = nullptr; void* progress_userdata = nullptr; @@ -359,7 +360,7 @@ struct ComposeObjectArgs : public ObjectWriteArgs { }; // struct ComposeObjectArgs struct UploadObjectArgs : public PutObjectBaseArgs { - std::string filename; + std::filesystem::path filename; http::ProgressFunction progressfunc = nullptr; void* progress_userdata = nullptr; diff --git a/src/args.cc b/src/args.cc index e361d77..3e1363c 100644 --- a/src/args.cc +++ b/src/args.cc @@ -213,12 +213,12 @@ error::Error DownloadObjectArgs::Validate() const { if (error::Error err = ObjectReadArgs::Validate()) { return err; } - if (!utils::CheckNonEmptyString(filename)) { + if (!utils::CheckNonEmptyString(filename.u8string())) { return error::Error("filename cannot be empty"); } if (!overwrite && std::filesystem::exists(filename)) { - return error::Error("file " + filename + " already exists"); + return error::Error("file " + filename.u8string() + " already exists"); } return error::SUCCESS; @@ -415,16 +415,15 @@ error::Error UploadObjectArgs::Validate() { if (error::Error err = ObjectArgs::Validate()) { return err; } - if (!utils::CheckNonEmptyString(filename)) { + if (!utils::CheckNonEmptyString(filename.u8string())) { return error::Error("filename cannot be empty"); } if (!std::filesystem::exists(filename)) { - return error::Error("file " + filename + " does not exist"); + return error::Error("file " + filename.u8string() + " does not exist"); } - std::filesystem::path file_path = filename; - size_t obj_size = std::filesystem::file_size(file_path); + size_t obj_size = std::filesystem::file_size(filename); object_size = static_cast(obj_size); return utils::CalcPartInfo(object_size, part_size, part_count); } diff --git a/src/client.cc b/src/client.cc index 94ffd56..1b48e0d 100644 --- a/src/client.cc +++ b/src/client.cc @@ -697,12 +697,13 @@ DownloadObjectResponse Client::DownloadObject(DownloadObjectArgs args) { etag = resp.etag; } - std::string temp_filename = - args.filename + "." + curlpp::escape(etag) + ".part.minio"; + std::filesystem::path temp_filename = args.filename; + temp_filename.concat("." + curlpp::escape(etag) + ".part.minio"); + std::ofstream fout(temp_filename, std::ios::trunc | std::ios::out); if (!fout.is_open()) { return error::make("unable to open file " + - temp_filename); + temp_filename.u8string()); } std::string region; @@ -779,8 +780,9 @@ UploadObjectResponse Client::UploadObject(UploadObjectArgs args) { try { file.open(args.filename); } catch (std::system_error& err) { - return error::make( - "unable to open file " + args.filename + "; " + err.code().message()); + return error::make("unable to open file " + + args.filename.u8string() + "; " + + err.code().message()); } PutObjectArgs po_args(file, args.object_size, 0);