Как я могу получить ФАЙЛ * результата CreateFile? - PullRequest
1 голос
/ 09 сентября 2011

См. Заголовок.

Как мне добиться противоположности этого вопроса: Как получить файл HANDLE из структуры fopen FILE?

Я создаюобработайте с

      HANDLE h = CreateFile(name,
                            GENERIC_WRITE,
                            0,
                            NULL,
                            OPEN_ALWAYS,
                            FILE_ATTRIBUTE_NORMAL,
                            NULL);

, а затем попробуйте записать в него некоторые данные, используя fputs.

Сбой вызова fputs на линии

_VALIDATE_STREAM_ANSI_RETURN(stream, EINVAL, EOF);

, где stream - дескриптор, который я получил от CreateFile.


Причинапоэтому я использую внешнюю библиотеку, которая использует дескрипторы FILE*, и я не открываю простой файл (как до сих пор), а вместо этого пытаюсь записать в канал.И изменение внешней библиотеки не вариант.

Ответы [ 2 ]

7 голосов
/ 09 сентября 2011

Не знаю, если это лучший способ, но посмотрите _open_osfhandle():

http://msdn.microsoft.com/en-us/library/bdts1c9x(v=vs.71).aspx

int fd = _open_osfhandle(h, ...);

Возвращает дескриптор файла, который вам придется открыть, используяfdopen чтобы получить FILE*.

FILE* fp = _fdopen(fd, ...);
1 голос
/ 09 сентября 2011

CreateFile возвращает внутренний дескриптор Windows в файл.Вы можете записать в файл, используя этот дескриптор, используя такие функции, как WriteFile .

Чтобы использовать fputs, вам нужно открыть файл с функцией fopen в C. Если вы это сделаетевам не нужно будет явно вызывать CreateFile, поскольку fopen сделает это за вас, если будет вызван с параметром "w" (для "записи").

Поэтому я не думаю, чтото, что вы после, возможно.Два набора функций несовместимы.

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