Объединение путей файловой системы в C - PullRequest
3 голосов
/ 10 февраля 2012

Подобно тому, как в python есть удобная функция os.path.join(), мне было интересно, есть ли хороший кроссплатформенный способ сделать это в C.

Мой текущий подход состоит в том, чтобы установить некоторые директивы препроцессора с чем-то вроде этого

#ifdef defined(linux)
#define PATH_SEPARATOR "/"
#else
#define PATH_SEPARATOR "\\"
#endif

Ответы [ 3 ]

4 голосов
/ 10 февраля 2012

Нет стандартного способа сделать это. Сделай сам или используй библиотеку. Например, Apache Portable Runtime предоставляет apr_filepath_merge .

4 голосов
/ 10 февраля 2012

Я уверен, что многие кроссплатформенные библиотеки имеют такую ​​функциональность. Может быть, вы хотите взглянуть на функцию apr_filepath_merge APR.

В C ++ вы можете использовать Boost:

#include <boost/filesystem.hpp>
using namespace boost::filesystem;

[...]    

path path1("/tmp");
path path2("example");
path result = path1 / path2;
0 голосов
/ 11 апреля 2019

Для C вы можете использовать cwalk , небольшую кроссплатформенную библиотеку, для выполнения операций, связанных с путем к файлу (либо cwk_path_join , либо cwk_path_join_multiple ):

#include <cwalk.h>
#include <stdio.h>
#include <stddef.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  char buffer[FILENAME_MAX];

  cwk_path_join("hello/there", "../world", buffer, sizeof(buffer));
  printf("The combined path is: %s", buffer);

  return EXIT_SUCCESS;
}

Выходы:

The combined path is: hello/world
...