c ++, отслеживать каталог на наличие изменений в windows - _tsplitpath_s не был объявлен в этой области - PullRequest
0 голосов
/ 09 декабря 2018

Мне нужно собрать программу c++, чтобы отслеживать каталог на предмет изменений файлов внутри него. Получение уведомлений об изменении каталога рекомендуется во многих вопросах, аналогичных моим.Я пробовал этот код, но первая ошибка

_tsplitpath_s не была объявлена ​​в этой области

ошибка относится к строке

_tsplitpath_s(lpDir, lpDrive, 4, NULL, 0, lpFile, _MAX_FNAME, lpExt, _MAX_EXT);

Iиспользуйте gcc version 5.1.0 и выполните код с помощью следующей команды в CMD

g++ file.cpp -o out

Ответы [ 2 ]

0 голосов
/ 09 декабря 2018

Код использует специфичное для Microsoft расширение для реализации stdlib.h . _splitpath_s и _wsplitpath_s доступны только при использовании реализации stdlib.h , поставляемой с компилятором Microsoft.Он недоступен в реализации stdlib.h , которая поставляется с GCC.

Чтобы обойти это, вы можете использовать стандартную библиотеку файловой системы C ++ (может небыть немедленно доступным с вашим компилятором ) или предоставить собственную реализацию функциональности splitpath.

В качестве альтернативы, вообще не вызывать _tsplitpath_s и всегда передаватькаталог и имя диска в WatchDirectory в примере кода.

0 голосов
/ 09 декабря 2018

Для начала, убедитесь, что у вас есть <stdlib.h> в комплекте.

Мои психические силы предполагают, что это наследство tchar.h.В наши дни старайтесь избегать использования apis "t" и используйте Unicode:

Если lpDir, lpDrive и другие параметры являются строками ANSI (char *):

_splitpath_s(lpDir, lpDrive, 4, NULL, 0, lpFile, _MAX_FNAME, lpExt, _MAX_EXT);

Если они в юникоде (WCHAR *, wchar_t *, LPCWSTR и т. Д.):

_wsplitpath_s(lpDir, lpDrive, 4, NULL, 0, lpFile, _MAX_FNAME, lpExt, _MAX_EXT);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...