Форум программистов
 
О проблемах, например, с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Ответ
 
Опции темы
Старый 26.09.2007, 00:14   #1
Solan
 
Регистрация: 26.09.2007
Сообщений: 5
По умолчанию Генерация файла с расширением CPP

Здраствуйте. У меня такой вопрос.
Предположим нужно сгенерировать какой-нибудь код на C++ и сохранить его в файлах .h и .CPP. (программа на С++ генерирует)
Не могли бы вы подсказать как это сделать.
То есть, как вообще с помощью C++ создать файл с такими расширениями?
(заранее извиняюсь если вопрос глупый, но мне не понятно)
Solan вне форума Ответить с цитированием
Старый 26.09.2007, 14:08   #2
studenth
Форумчанин
 
Регистрация: 10.09.2007
Сообщений: 105
По умолчанию

Так, начну с того, что *.CPP файл, это обычный текстовый файл.
Создать его можно функцией
//----------------------ВЗЯЛ ИЗ MS SDK-------------------------------
HANDLE CreateFile(
LPCTSTR lpFileName, // pointer to name of the file
DWORD dwDesiredAccess, // access (read-write) mode
DWORD dwShareMode, // share mode
LPSECURITY_ATTRIBUTES lpSecurityAttributes, // pointer to security attributes
DWORD dwCreationDistribution, // how to create
DWORD dwFlagsAndAttributes, // file attributes
HANDLE hTemplateFile // handle to file with attributes to copy
);
//---------------------------------------------------------------------
так, функция возвращает идентификатор созданного файла (Handle).
первый параметр функции это и есть имя файла. В нашем случае это SuperFile.cpp....правильно??? нам же нужен *.cpp файл?
далее,
второй параметр есть тип доступа к объекту может быть
0 - железка сама решает как файл может быть открыт программой
GENERIC_READ - только чтение
GENERIC_WRITE - запись.
можно комбинировать, если мне не изменяет память при помощи операции побитового или....тоесть GENERIC_READ | GENERIC_WRITE
далее,
значит тут идет параметр, регулирующий, как будет вести себя система при одновременном открытии данного файла несколькими приложениями, возможны варианты:
FILE_SHARE_DELETE - если одно приложение работает с файлом, а от другого приходит запрос на его удаление, файл будет удален
FILE_SHARE_READ - соответственно дает читать одновременно всем
ну и FILE_SHARE_WRITE - писать одновременно все.
Можешь поставить 0, и тогда только одна прога может читать/писать этот файл в один момент времени.
далее,
идет указатель на структуру SECURITY_ATTRIBUTES, ее нужно объявить выше. туда будут помещены кое какие данные, тут писать не буду.
далее идет интересный параметр,
отвечающий за реакцию функции на разные обстаятельства при создании файла, если указать
CREATE_NEW - функция навернется если файл уже существует
собственно эту константу и ставь. а то я печатать запарюсь
и последний параметр, отвечает за атрибуты файла
FILE_ATTRIBUTE_HIDDEN - вот так ты сделаешь скрытым
FILE_ATTRIBUTE_NORMAL - так нормальным сделаешь.
есть куча возможностей,
далее идет последний....о да, наконец то, последний параметр, отвечает за указание системе, как создать файл.
есть вариации, можно реализовать отложенную запись на диск, писать файл в кэш, а потом уже на диск.
но нам тут нужен параметр....
в общем я особо не вник пиши NULL
вот рабочий пример вызова функции

HANDLE hFile =
CreateFile("C:\\test121233.cpp", GENERIC_READ|GENERIC_WRITE, 0, &tt, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL);
studenth вне форума Ответить с цитированием
Старый 26.09.2007, 14:10   #3
studenth
Форумчанин
 
Регистрация: 10.09.2007
Сообщений: 105
По умолчанию

Да, народ,
кто силен в английском, переведите инфу про последний параметр!!!!
studenth вне форума Ответить с цитированием
Старый 26.09.2007, 14:18   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,840
По умолчанию

Хендл на временный файл (с аттрибутом копии)
Stilet вне форума Ответить с цитированием
Старый 26.09.2007, 16:21   #5
studenth
Форумчанин
 
Регистрация: 10.09.2007
Сообщений: 105
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Хендл на временный файл (с аттрибутом копии)
это параметр, принимающий Хендл на временный файл, а временный файл, это файл имеющий атрибут копии. Я вас правильно понял?
если да, то смысл такого действия.
просто в MS SDK писалось нечто насчет отложенной записи на диск и прочего.
studenth вне форума Ответить с цитированием
Старый 26.09.2007, 22:30   #6
Solan
 
Регистрация: 26.09.2007
Сообщений: 5
По умолчанию

studenth персональное спасибо)
Только я так понял, это для Visual, а мне бы для builder'a. На одном форуме сказали, что это в принципе обычные текстовые файлы и с ними можно работать так же(создавать, редактировать и т.д)
Solan вне форума Ответить с цитированием
Старый 27.09.2007, 07:09   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,840
По умолчанию

Цитата:
Сообщение от studenth Посмотреть сообщение
Я вас правильно понял?
Я наверно некорректно выразился, технически перевел, вот цитата :

Файл-шаблон, атрибуты которого используются для открытия. В Windows 95/98 не используется и должен быть равен 0

Кроме того : hTemplateFile is not supported and the function fails if it is nonzero. - Этот параметр не поддерживается и функция вернет фальш если не поставить в него 0 (Null)
Stilet вне форума Ответить с цитированием
Старый 28.09.2007, 09:00   #8
studenth
Форумчанин
 
Регистрация: 10.09.2007
Сообщений: 105
По умолчанию

Цитата:
Сообщение от Solan Посмотреть сообщение
Только я так понял, это для Visual, а мне бы для builder'a.
Если честно, я не пользуюсь Visual, только продукцией фирмы Borland.
Это функция из прикладного интерфейса программирования Win32.
Ее можно без труда использовать в обоих средах.

А вообще для более простой работы можно использовать файловые потоки, определенные в "fstream.h", вот простейший пример:
//---------------------------------------------------------------------
#include <iostream.h>
#include <fstream.h>
#include <windows.h>
#pragma hdrstop
//---------------------------------------------------------------------
char Hello[] = "int main(){cout<<\"Hello World!\"<<endl; return 0;}";
#pragma argsused
int main(int argc, char* argv[])
{
SetConsoleOutputCP(1251);
char Filename[] = "C:\\code.cpp";
cout<<"Программа создает *.CPP файл"<<endl
<<"И записывает в него код \"Hello World\""<<endl;
ofstream Output(Filename);
Output<<Hello;
system("pause");
return 0;
}
//---------------------------------------------------------------------
studenth вне форума Ответить с цитированием
Старый 28.09.2007, 09:01   #9
studenth
Форумчанин
 
Регистрация: 10.09.2007
Сообщений: 105
По умолчанию

Stilet,
спасибо.
блин, нужно учить буржуйский.
studenth вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Можно ли внести изменения в файл с расширением .exe Sanlev Помощь студентам 12 08.02.2010 15:49
по нажатию на кнопку вызвать другой фаил с расширением exe который находится в той же папке 1234 Общие вопросы Delphi 3 05.08.2008 11:32
Как получить график из файла с расширением .crd feldmaster Помощь студентам 1 22.04.2008 22:19
Как можно в файл (со своим расширением) записать любые файлы (например, звуковые)? andrey4623 Общие вопросы Delphi 3 12.01.2008 09:59
Генерация имени записываемого файла. Паскаль NikLik Помощь студентам 4 25.11.2007 21:25


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS
Здесь нужно купить рекламу за 7 тыс руб в месяц! )
пишите сюда - alarforum@yandex.ru
ИКС 840