Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Voprosy_po_proge_otvety.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
45 Кб
Скачать
☆
  1. Бинарные файлы. Запись массивов и структур в бинарные файлы. Примеры.

Пример сохранения массива структур в бинарный файл:

#include"stdafx.h"

#include<stdio.h>

// ...

structtovar

{

// ...

};

int _tmain(int argc, _TCHAR* argv[])

{

FILE* fp = fopen("myFile.dat", "wb");

int a = 25; // Количество элементов в массиве структур

tovar *Tov = new tovar[a];

fwrite(&a, sizeof(int), 1, fp);

for (int i = 0; i<a; i++)

fwrite(&Tov[i], sizeof(tovar), 1, fp);

return 0;

}

Пример чтения массива структур из бинарного файла:

#include"stdafx.h"

#include<stdio.h>

// ...

structtovar

{

// ...

};

int _tmain(int argc, _TCHAR* argv[])

{

FILE* fp = fopen("myFile.dat", "rb");

int a = 0; // Количество элементов в массиве структур

fread(&a, sizeof(int), 1, fp);

tovar *Tov = new tovar[a];

for (int i = 0; i<a; i++)

fread(&Tov[i], sizeof(tovar), 1, fp);

return 0;

}

  1. Файловая система. Путь до файла. Маска файлов. Атрибуты файлов.

Файловая система: Способ хранения и организации доступа к данным на информационном носителе или его разделе. Классическая файловая система имеет иерархическую структуру, в которой файл однозначно определяется полным путём к нему.

Полный путь до файла или папки - способ однозначного определения файла или папки в файловой системе. Относительный путь до файла или папки – способ определения файла или папки относительно другой папки.

C:\Windows\Temp\Text.txt

Маска файла часто используется для определения группы файлов или папок в файловой системе.

Метасимвол

Значение

*

Любое количество символов (в том числе и 0)

?

Один любой символ

Любой символ

Обязательное вхождение заданного символа

Пример

Пояснение

*.cpp

Все файлы с расширением .cpp

f*.ex?

Все файлы, начинающиеся с f, и заканчивающиеся расширением .ex с любым символом на конце

*co*

Все файлы содержащие co

Каждый файл, помимо имени, имеет ряд атрибутов. Наиболее значимые из них: • Размер файла; • Даты создания, изменения и последнего обращения к файлу; • Файловые флаги (атрибуты): папка, архивных, системный, только для чтения, скрытый.

  1. Работа с файловой системой в С++. Структура WIN32_FIND_DATA. Примеры.

struct WIN32_FIND_DATA

{

DWORD dwFileAttributes;

FILETIME ftCreationTime;

FILETIME ftLastAccessTime;

FILETIME ftLastWriteTime;

DWORD nFileSizeHigh;

DWORD nFileSizeLow;

charcFileName[MAX_PATH];

charcAlternateFileName[14];

};

Получение списка файлов:

HANDLE FindFirstFile(constchar* sFileMask, WIN32_FIND_DATA* lpFindFileData);

BOOL FindNextFile(HANDLE hFindFile, WIN32_FIND_DATA* lpFindFileData);

Получение списка файлов и папок по заданной маске:

#include<Windows.h>

Using namespace std;

int _tmain(int argc, _TCHAR* argv[])

{

WIN32_FIND_DATA fd;

HANDLE hFind = FindFirstFile("c:\\*", &fd);

do

{

if (hFind == INVALID_HANDLE_VALUE)

break;

cout<<fd.cFileName<<"\n";

} while (FindNextFile(hFind, &fd));

FindClose(hFind);

return 0;

}

Работа с атрибутами:

HANDLE hFind = FindFirstFile(L"c:\\*", &fd);

do

{

cout<<fd.cFileName<<"\t\t\t";

if (fd.dwFileAttributes& FILE_ATTRIBUTE_DIRECTORY)

cout<<"<DIR> ";

if (fd.dwFileAttributes& FILE_ATTRIBUTE_HIDDEN)

cout<<"<HIDDEN> ";

if (fd.dwFileAttributes& FILE_ATTRIBUTE_SYSTEM)

cout<<"<SYSTEM> ";

cout<<"\n";

} while (FindNextFile(hFind, &fd));

FindClose(hFind);

Атрибут

Значение

FILE_ATTRIBUTE_DIRECTORY

Папка

FILE_ATTRIBUTE_HIDDEN

Скрытый файл

FILE_ATTRIBUTE_SYSTEM

Системный

FILE_ATTRIBUTE_ARCHIVE

Архивный

FILE_ATTRIBUTE_READONLY

Только для чтения

  1. Работа с датами в С++. Структуры FILETIME и SYSTEMTIME . Примеры.

struct FILETIME

{

DWORD dwLowDateTime;

DWORD dwHighDateTime;

}; //Хранит количество сотен наносекунд, прошедших с 1 января 1601 года

struct SYSTEMTIME

{

WORD wYear;

WORD wMonth;

WORD wDayOfWeek;

WORD wDay;

WORD wHour;

WORD wMinute;

WORD wSecond;

WORD wMilliseconds;

};

Преобразование FILETIME в SYSTEMTIME:

BOOL FileTimeToSystemTime(const FILETIME* lpFileTime, SYSTEMTIME* lpSystemTime);

Пример вывода даты на экран:

HANDLE hFind = FindFirstFile(L"c:\\*", &fd);

do

{

cout<<fd.cFileName<<"\t\t\t";

SYSTEMTIME st;

if (FileTimeToSystemTime(&fd.ftCreationTime, &st) == TRUE)

{

cout<<st.wDay<<"-"<<st.wMonth<<"-"<<st.wYear<<" ";

cout<<st.wHour<<":"<<st.wMinute<<":"<<st.wSecond<<" ";

} //...

cout<<"\n";

} while (FindNextFile(hFind, &fd));

FindClose(hFind);

Вывод даты согласно часовому поясу:

BOOL FileTimeToLocalFileTime(const FILETIME* lpFileTime, FILETIME* lpLocalFileTime);

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]