Вызов функции stat

Я хочу использовать stat функция. Но я не знаю, как это сделать с переменными. Я получаю значение DIRECTORY и sub-dir из какого-то другого процесса.

if( stat( DIRECTORY/sub-dir, &st ) == 0 )
{--}

Я получаю сообщение об ошибке следующим образом "error: invalid operands to binary /"

2 ответа

Вам нужно создать одну строку и передать ее stat(), Предполагая поддержку VLA (C99 или C11 с соответствующей доступной опцией), тогда:

char path[strlen(DIRECTORY) + strlen(subdir) + sizeof("/")];
snprintf(path, sizeof(path), "%s/%s", DIRECTORY, subdir);
struct stat st;
if (stat(path, &st) != 0)
    ...oops!...
else
    ...process data...

Если у вас нет поддержки VLA, вы можете использовать массив фиксированного размера или malloc() а также free(),

Или:

char path[PATH_MAX];  // Beware: not always defined; _POSIX_PATH_MAX?

Или же:

size_t pathlen =strlen(DIRECTORY)+strlen(subdir)+sizeof("/");
char *path = malloc(pathlen);
if (path != 0)
{
    snprintf(path, pathlen, "%s/%s", DIRECTORY, subdir);
    struct stat st;
    if (stat(path, &st) != 0)
        ...oops!...
    else
        ...process data...
    free(path);
}

Так должно быть

if( stat( "DIRECTORY/sub-dir", &st ) == 0 )

Обратитесь к странице справки stat():

int stat(const char *path, struct stat *buf);

Первый аргумент (путь) должен быть const char * введите путь в виде строки "DIRECTORY/sub-dir"

если DIRECTORY а также sub_dir являются переменными, то вы должны объединить их в третью переменную:

char buf[256];
sprintf(buf, "%s/%s", DIRECTORY, sub_dir);
if( stat( buf, &st ) == 0 )
Другие вопросы по тегам