Только если используется папка, созданная VisualStudio, файл журнала остается пустым.Низкий уровень IO используется - PullRequest
0 голосов
/ 21 сентября 2019

Это ситуация ... Простой класс утилит для обеспечения наличия файла журнала.Конструктор делает _sopen_s и сохраняет полученный дескриптор файла.Вот соответствующая строка:

 ...
// inside a constructor receiving a file_name
errno_t rez = _sopen_s(&file_descriptor, file_name, O_WRONLY | O_APPEND | O_CREAT, _SH_DENYNO, _S_IREAD | _S_IWRITE);
// using `fstat()` for  checks here
// all is fine, exit the constructor
...

Очевидно, что это WINLAND, а _sopen_s() - то, что требуется.И по общему признанию, это никогда не терпит неудачу.Теперь есть этот единственный метод, в том же классе:

   FILE* file_ptr(const char* options_ = "w") const noexcept
    {
        _ASSERTE(file_descriptor_ > -1);
        static FILE* file_ = _fdopen(file_descriptor_, options_);
        _ASSERTE(file_ != nullptr);
        _ASSERTE(0 == ferror( file_));
        return file_;
    }

Это также, я никогда не видел сбой.Calers использует этот указатель файла где угодно, в качестве первого аргумента fprintf.Для записи файла журнала и тому подобное.Все из которых блаженно и мирно «просто работают».

До.В качестве имени файла журнала используется базовое имя приложения с добавленным суффиксом «.log».

Пример: ".\myprog.exe.log".Вы нажимаете F5, VS производит все выходные данные, необходимые для отладки в папке «Debug», и вы сосредотачиваетесь на том, что вам нужно для отладки.

Но этот файл журнала ~\Debug\myprog.exe.log остается пустым после завершения myprog.exe.Никаких исключений и ошибок не обнаружено ...

И ... если вы решите, что ваш файл журнала должен быть, например, "d: /whever.log", он остается хорошо упакованным с выводом fprintf(), используямеханизм, как описано выше.

Я предполагаю, что есть некоторые «специальные» разрешения, необходимые для записи в этот файл, расположенный внутри этих папок сборки, созданных Visual Studio.

Но ошибки не возникает, и весь механизм работает, если указатель файла предназначен для файла, расположенного где-либо за пределами этих папок ...

Почему fprintf тихо не производит никакого вывода в этилокальные файлы журнала, расположенные в визуальной студии, сгенерированные папки?Любая идея кто-нибудь?

ps: да все четыре папки отладки / выпуска x86 и отладки / выпуска x64, которые я проверил.если там есть файлы журнала, они создаются, и об ошибках не сообщается, но они остаются пустыми.

Машина полностью обновлена ​​на WIN10 PRO.Visual Studio 2019 и CL также полностью обновлены.SDK самый последний.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...