Сохранение файла в корень

178
02 декабря 2018, 22:10

Пишу экстеншен для одной игры. Обычная ддл-ка в виде логера. Имеется вот такой кусок кода:

int __stdcall RVExtensionArgs(char *output, int outputSize, const char *function, const char **args, int argsCnt)
{
  if (!strncmp(function, "logger", 2))
  {
    std::string fnc = args[0];
    std::string ln = args[1];
    std::string dir = args[2];
    //Output it as the .dll result to arma 3
  strncpy_s(output, outputSize, "Log created!", _TRUNCATE);
  //Get current Server Time for loggin
  time_t currentTime;
  struct tm *localTime;
  time(&currentTime);                   // Get the current time
  localTime = localtime(&currentTime);  // Convert the current time to the local time
  //Convert them to strings
  string Day = to_string(localTime->tm_mday);
  string Month = to_string(localTime->tm_mon + 1);
  string Year = to_string(localTime->tm_year + 1900);
  string Hour = to_string(localTime->tm_hour);
  string Min = to_string(localTime->tm_min);
  string Sec = to_string(localTime->tm_sec);
  //Create Dir for Logging
  // std::string dir = "D:\\A3Logs";
  // CreateDirectoryA(dir, NULL);
  //define the path and filename and log it.
  string logname = dir + "/" + ln + ".txt";
  logname.erase(remove( logname.begin(), logname.end(), '\"' ),logname.end());
  std::ofstream log(logname, std::ios_base::app | std::ios_base::out);
  log << Day << "-" << Month << "-" << Year << " - " << Hour << ":" << Min << ":" << Sec << " :: " << fnc << "\n";
}
  return 0;
};

. Который по сути и представляет собой логгер. В переменную dir должен приходить абсолютный путь для сохранения файла. Но хотелось бы если приходит в аргумент пустой стринг, то файл должен сохраняться в корне с длл-кой. Что-то на подобии шарпового Environment.CurrentDirectory. Алсо, экстеншен будет компилиться под линукс.

Answer 1

Linux-based ОС: [спасибо за замечание @Fat-Zer]

#include <unistd.h>
char buf[PATH_MAX];
readlink("/proc/self/exe", buf, PATH_MAX);

Windows: GetModuleFilename

MacOS:

#include <mach-o/dyld.h>
char path[1024];
uint32_t size = sizeof(path);
if (_NSGetExecutablePath(path, &size) == 0)
    printf("executable path is %s\n", path);
READ ALSO
Работа с QTimer, QThread и ProgressBar

Работа с QTimer, QThread и ProgressBar

Хочется выполнить вычисления в отдельном от Ui потоке без всяких сигналовМетод, выполняющий вычисления — это приватный слот главного окна

160
Работа с массивом строк

Работа с массивом строк

У меня есть массив строк:

180
C++ WinApi отделить UI View от кода

C++ WinApi отделить UI View от кода

Можно ли сделать что-то похожее на XAML в C# (WPF)? Отделить UI от кода?

173