FAQ:WinAPI VCPP:записать данные в файл — различия между версиями
Материал из Весельчак У
RXL (обсуждение | вклад) (Новая: ===Как записать данные в файл?=== Способов несколько. # Если используется MFC проект с Doc/View-архитекурой, ...) |
RXL (обсуждение | вклад) |
||
Строка 3: | Строка 3: | ||
Способов несколько. | Способов несколько. | ||
− | + | 1. Если используется MFC проект с Doc/View-архитекурой, то самое простое, это воспользоваться сериализацией. Например, имеется переменная int m_nX. Запишем и прочитаем так: | |
<pre> | <pre> | ||
Строка 22: | Строка 22: | ||
кнопок и команд меню сохранить/открыть, созданных Визардом. | кнопок и команд меню сохранить/открыть, созданных Визардом. | ||
− | + | 2. Можно использовать функции стандартной библиотеки С++. | |
<pre> | <pre> | ||
Строка 61: | Строка 61: | ||
</pre> | </pre> | ||
− | + | 3. Можно использовать функции API. | |
<pre> | <pre> | ||
Строка 85: | Строка 85: | ||
</pre> | </pre> | ||
− | + | 4. Можно воспользоваться методами классов CFile и CStdioFile (MFC). | |
[[Category:FAQ:WinAPI VCPP]] | [[Category:FAQ:WinAPI VCPP]] |
Версия 10:24, 29 июля 2008
Как записать данные в файл?
Способов несколько.
1. Если используется MFC проект с Doc/View-архитекурой, то самое простое, это воспользоваться сериализацией. Например, имеется переменная int m_nX. Запишем и прочитаем так:
void CMyDoc::Serialize(CArchive& ar) { if (ar.IsStoring()) { ar << m_nX; // пишем в файл } else { ar >> m_nX; //читаем из файла } }
Этот метод вызывается автоматически при открытии/записи файла при помощи кнопок и команд меню сохранить/открыть, созданных Визардом.
2. Можно использовать функции стандартной библиотеки С++.
// открытие FILE *fopen(const char *filename, const char *mode); // запись size_t fwrite(const void *buffer, size_t size,size_t count, FILE *stream); // чтение size_t fread(void *buffer, size_t size, size_t count, FILE *stream);
К примеру, объявляем структуру данных, а затем массив этих структур. Далее открываем файл и сохраняем в него массив.
struct MyStruct { int i; bool b; char str[5]; }; // одна переменная MyStruct st; // массив структур MyStruct mstr[100]; // открываем для записи (w) двоичный (b) файл myData.bin FILE* f = fopen("myData.bin", "wb"); // запись массива fwrite(mstr, sizeof(MyStruct), 100, f); // запись одного экземпляра структуры fwrite(&st, sizeof(MyStruct), 1, f);
3. Можно использовать функции API.
HANDLE CreateFile( LPCTSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile ); BOOL WriteFile( HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite, LPDWORD lpNumberOfBytesWritten, LPOVERLAPPED lpOverlapped ); BOOL CloseHandle(HANDLE hObject);
4. Можно воспользоваться методами классов CFile и CStdioFile (MFC).