Visual C ++ создать текстовый файл - PullRequest
1 голос
/ 06 октября 2010

Как создать текстовый файл?

CreateFile("1",            
               GENERIC_READ | GENERIC_WRITE,
               0,                    
               NULL,                 
               CREATE_NEW,        
               FILE_FLAG_OVERLAPPED, 
               NULL); 

бросок

1> ------ Началась сборка: Проект: test2, Конфигурация: Отладка Win32 ------ 1> test2.cpp 1> c: \ users \ kredkołamacz \ documents \ visual studio 2010 \ projects \ test2 \ test2 \ Form1.h (126): ошибка C2065: 'GENERIC_READ': необъявленный идентификатор 1> c: \ users \ kredkołamacz \ Documents \ visual studio 2010 \ projects \ test2 \ test2 \ Form1.h (126): ошибка C2065: 'GENERIC_WRITE': необъявленный идентификатор 1> c: \ users \ kredkołamacz \ documents \ visual studio 2010 \ projects \ test2 \ test2 \ Form1.h (128): ошибка C2065: 'NULL': необъявленный идентификатор 1> c: \ users \ kredkołamacz \ documents \ visual studio 2010 \ projects \ test2 \ test2 \ Form1.h (129): ошибка C2065: 'CREATE_NEW': необъявленный идентификатор 1> c: \ users \ kredkołamacz \ documents \ visual studio 2010 \ projects \ test2 \ test2 \ Form1.h (130): ошибка C2065: 'FILE_FLAG_OVERLAPPED': необъявленный идентификатор 1> c: \ users \ kredkołamacz \ documents \ visual studio 2010 \ projects \ test2 \ test2 \ Form1.h (131): ошибка C2065: 'NULL': необъявленный идентификатор 1> c: \ users \ kredkołamacz \ documents \ visual studio 2010 \ projects \ test2 \ test2 \ Form1.h (125): ошибка C3861: «CreateFile»: идентификатор не найден ========== Построение: 0 выполнено, 1 не выполнено, 0 обновлено, 0 пропущено ==========

1 Ответ

2 голосов
/ 06 октября 2010

Включите заголовочный файл Windows следующим образом в top ваших .h или .cpp файлов:

#include <windows.h>

Это должно решить проблемы, связанные с неопределенными символами, такими какGENERIC_WRITE и CreateFile.Как упоминалось в другом постере, вы, как правило, должны писать свой код в .cpp файлах и объявлять константы или классы только в заголовочных файлах, размещая реализации методов в .cpp файлах вместе с обычными функциями.

Проблемы, связанные сCreateFileW как только вы выйдете за пределы этого пункта, вам понадобятся дополнительные пояснения:

По умолчанию приложения Windows, сгенерированные из шаблонов Visual Studio, ссылаются на Unicode (широкие символы) версии API-интерфейсов Windows и имеютUNICODE Макрос препроцессора C / C ++, определенный для указания этого.Когда определено UNICODE, препроцессор определяет символ CreateFile для расширения до имени фактического базового имени функции Windows, которое равно CreateFileW, где суффикс W указывает, что это «широкий символ», то есть Unicodeфункция.Если макрос UNICODE не определен (который можно переопределить с помощью различных настроек проекта Visual Studio), то CreateFile развернется до символа CreateFileA, который является именем строковой версии ANSI (A для ANSI)функции.В 99% случаев вы должны использовать настройки по умолчанию для UNICODE, так как все современные версии окон используют символы Юникод для внутреннего использования.

Поскольку CreateFileW принимает строковые аргументы Юникода, вам необходимо передать L"1" (т.е.строковый литерал широких символов) или используйте макрос TEXT (например, TEXT("1")), который будет генерировать правильный тип строки, соответствующий тому, определен ли переключатель компилятора UNICODE.

Вот ссылка настатья MSDN о TEXT: ссылка .

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