FAQ:WinAPI VCPP:записать данные в файл
Материал из Весельчак У
Как записать данные в файл?
Способов несколько.
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).