diff --git a/obs/window-basic-main-outputs.cpp b/obs/window-basic-main-outputs.cpp index 66a84cb55..2b5048a6a 100644 --- a/obs/window-basic-main-outputs.cpp +++ b/obs/window-basic-main-outputs.cpp @@ -1,4 +1,5 @@ #include +#include #include #include "audio-encoders.hpp" #include "window-basic-main.hpp" @@ -555,6 +556,18 @@ bool SimpleOutput::StartStreaming(obs_service_t *service) return false; } +static void ensure_directory_exists(string &path) +{ + replace(path.begin(), path.end(), '\\', '/'); + + size_t last = path.rfind('/'); + if (last == string::npos) + return; + + string directory = path.substr(0, last); + os_mkdirs(directory.c_str()); +} + bool SimpleOutput::StartRecording() { if (usingRecordingPreset) { @@ -600,6 +613,7 @@ bool SimpleOutput::StartRecording() strPath += GenerateSpecifiedFilename(ffmpegOutput ? "avi" : format, noSpace, filenameFormat); + ensure_directory_exists(strPath); if (!overwriteIfExists) FindBestFilename(strPath, noSpace); @@ -1136,6 +1150,7 @@ bool AdvancedOutput::StartRecording() strPath += GenerateSpecifiedFilename(recFormat, noSpace, filenameFormat); + ensure_directory_exists(strPath); if (!overwriteIfExists) FindBestFilename(strPath, noSpace); diff --git a/obs/window-basic-settings.cpp b/obs/window-basic-settings.cpp index 28c595d25..1183c3823 100644 --- a/obs/window-basic-settings.cpp +++ b/obs/window-basic-settings.cpp @@ -2919,12 +2919,12 @@ void OBSBasicSettings::on_filenameFormatting_textEdited(const QString &text) { #ifdef __APPLE__ size_t invalidLocation = - text.toStdString().find_first_of(":/\\"); + text.toStdString().find_first_of(":"); #elif _WIN32 size_t invalidLocation = - text.toStdString().find_first_of("<>:\"/\\|?*"); + text.toStdString().find_first_of("<>:\"|?*"); #else - size_t invalidLocation = text.toStdString().find_first_of("/"); + size_t invalidLocation = string::npos; #endif if (invalidLocation != string::npos)