FAQ:WinAPI VCPP:записать данные в файл — различия между версиями
Материал из Весельчак У
RXL (обсуждение | вклад) |
RXL (обсуждение | вклад) м (→Как записать данные в файл?) |
||
Строка 5: | Строка 5: | ||
1. Если используется MFC проект с Doc/View-архитекурой, то самое простое, это воспользоваться сериализацией. Например, имеется переменная int m_nX. Запишем и прочитаем так: | 1. Если используется MFC проект с Doc/View-архитекурой, то самое простое, это воспользоваться сериализацией. Например, имеется переменная int m_nX. Запишем и прочитаем так: | ||
− | < | + | <syntaxhighlight lang="cpp"> |
void CMyDoc::Serialize(CArchive& ar) | void CMyDoc::Serialize(CArchive& ar) | ||
{ | { | ||
Строка 17: | Строка 17: | ||
} | } | ||
} | } | ||
− | </ | + | </syntaxhighlight> |
Этот метод вызывается автоматически при открытии/записи файла при помощи | Этот метод вызывается автоматически при открытии/записи файла при помощи | ||
Строка 24: | Строка 24: | ||
2. Можно использовать функции стандартной библиотеки С++. | 2. Можно использовать функции стандартной библиотеки С++. | ||
− | < | + | <syntaxhighlight lang="cpp"> |
// открытие | // открытие | ||
FILE *fopen(const char *filename, const char *mode); | FILE *fopen(const char *filename, const char *mode); | ||
Строка 33: | Строка 33: | ||
// чтение | // чтение | ||
size_t fread(void *buffer, size_t size, size_t count, FILE *stream); | size_t fread(void *buffer, size_t size, size_t count, FILE *stream); | ||
− | </ | + | </syntaxhighlight> |
К примеру, объявляем структуру данных, а затем массив этих структур. Далее открываем файл и сохраняем в него массив. | К примеру, объявляем структуру данных, а затем массив этих структур. Далее открываем файл и сохраняем в него массив. | ||
− | < | + | <syntaxhighlight lang="cpp"> |
struct MyStruct | struct MyStruct | ||
{ | { | ||
Строка 59: | Строка 59: | ||
// запись одного экземпляра структуры | // запись одного экземпляра структуры | ||
fwrite(&st, sizeof(MyStruct), 1, f); | fwrite(&st, sizeof(MyStruct), 1, f); | ||
− | </ | + | </syntaxhighlight> |
3. Можно использовать функции API. | 3. Можно использовать функции API. | ||
− | < | + | <syntaxhighlight lang="cpp"> |
HANDLE CreateFile( | HANDLE CreateFile( | ||
LPCTSTR lpFileName, | LPCTSTR lpFileName, | ||
Строка 83: | Строка 83: | ||
BOOL CloseHandle(HANDLE hObject); | BOOL CloseHandle(HANDLE hObject); | ||
− | </ | + | </syntaxhighlight> |
4. Можно воспользоваться методами классов CFile и CStdioFile (MFC). | 4. Можно воспользоваться методами классов CFile и CStdioFile (MFC). | ||
[[Category:FAQ:WinAPI VCPP]] | [[Category:FAQ:WinAPI VCPP]] |
Текущая версия на 01:07, 30 июля 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).