🗊Презентация Керування введенням - виведенням. Файли. Операційні системи. (Лекція 9)

Нажмите для полного просмотра!
Керування введенням - виведенням. Файли. Операційні системи. (Лекція 9), слайд №1Керування введенням - виведенням. Файли. Операційні системи. (Лекція 9), слайд №2Керування введенням - виведенням. Файли. Операційні системи. (Лекція 9), слайд №3Керування введенням - виведенням. Файли. Операційні системи. (Лекція 9), слайд №4Керування введенням - виведенням. Файли. Операційні системи. (Лекція 9), слайд №5Керування введенням - виведенням. Файли. Операційні системи. (Лекція 9), слайд №6Керування введенням - виведенням. Файли. Операційні системи. (Лекція 9), слайд №7Керування введенням - виведенням. Файли. Операційні системи. (Лекція 9), слайд №8Керування введенням - виведенням. Файли. Операційні системи. (Лекція 9), слайд №9Керування введенням - виведенням. Файли. Операційні системи. (Лекція 9), слайд №10Керування введенням - виведенням. Файли. Операційні системи. (Лекція 9), слайд №11Керування введенням - виведенням. Файли. Операційні системи. (Лекція 9), слайд №12Керування введенням - виведенням. Файли. Операційні системи. (Лекція 9), слайд №13Керування введенням - виведенням. Файли. Операційні системи. (Лекція 9), слайд №14Керування введенням - виведенням. Файли. Операційні системи. (Лекція 9), слайд №15Керування введенням - виведенням. Файли. Операційні системи. (Лекція 9), слайд №16Керування введенням - виведенням. Файли. Операційні системи. (Лекція 9), слайд №17Керування введенням - виведенням. Файли. Операційні системи. (Лекція 9), слайд №18Керування введенням - виведенням. Файли. Операційні системи. (Лекція 9), слайд №19Керування введенням - виведенням. Файли. Операційні системи. (Лекція 9), слайд №20Керування введенням - виведенням. Файли. Операційні системи. (Лекція 9), слайд №21

Содержание

Вы можете ознакомиться и скачать презентацию на тему Керування введенням - виведенням. Файли. Операційні системи. (Лекція 9). Доклад-сообщение содержит 21 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1





Змістовний модуль:
КЕРУВАННЯ ВВЕДЕННЯМ – ВИВЕДЕННЯМ 
Розділ 2: ФАЙЛИ  
Лекція 9
Файли. Частина 2
Описание слайда:
Змістовний модуль: КЕРУВАННЯ ВВЕДЕННЯМ – ВИВЕДЕННЯМ Розділ 2: ФАЙЛИ Лекція 9 Файли. Частина 2

Слайд 2





ПИТАННЯ ДЛЯ ВИВЧЕННЯ
Робота з показниками файлів.
Визначення розміру файлів
Прямий доступ до даних.
Описание слайда:
ПИТАННЯ ДЛЯ ВИВЧЕННЯ Робота з показниками файлів. Визначення розміру файлів Прямий доступ до даних.

Слайд 3





ПОКАЗНИКИ ДЛЯ ФАЙЛІВ
DWORD WINAPI SetFilePointer(
  __in          HANDLE hFile,
  __in          LONG lDistanceToMove,
  __in_out_opt  PLONG lpDistanceToMoveHigh,
  __in          DWORD dwMoveMethod
);
HANDLE hFile – дескриптор файлу (файл треба відкрити);
lDistanceToMove – молодша частина зміщення в файлі;
lpDistanceToMoveHigh – адреса для старшої частини зміщення перед викликом та зміщення відносно початку файлу після виконання функції
dwMoveMethod : визначає, відносно чого зміщення 
FILE_BEGIN 	– відносно початку файлу;
FILE_CURRENT – відносно поточної позиції, 
FILE_END 	- відносно кінця файлу.
Якщо треба розмір файлу зменшити, треба встановити показник (SetFilePointer) та встановити кінець файлу:
 
BOOL WINAPI SetEndOfFile( __in HANDLE hFile );
Описание слайда:
ПОКАЗНИКИ ДЛЯ ФАЙЛІВ DWORD WINAPI SetFilePointer( __in HANDLE hFile, __in LONG lDistanceToMove, __in_out_opt PLONG lpDistanceToMoveHigh, __in DWORD dwMoveMethod ); HANDLE hFile – дескриптор файлу (файл треба відкрити); lDistanceToMove – молодша частина зміщення в файлі; lpDistanceToMoveHigh – адреса для старшої частини зміщення перед викликом та зміщення відносно початку файлу після виконання функції dwMoveMethod : визначає, відносно чого зміщення FILE_BEGIN – відносно початку файлу; FILE_CURRENT – відносно поточної позиції, FILE_END - відносно кінця файлу. Якщо треба розмір файлу зменшити, треба встановити показник (SetFilePointer) та встановити кінець файлу: BOOL WINAPI SetEndOfFile( __in HANDLE hFile );

Слайд 4





СТАНДАРТНІ ФУНКЦІЇ ДЛЯ ВИЗНАЧЕННЯ РОЗМІРУ ФАЙЛУ
1. DWORD WINAPI GetFileSize( 
	__in HANDLE hFile, // Дескриптор файлу
	__out LPDWORD lpFileSizeHigh //старша частина розміру
); 
Недолік: не можна узнати про наявність помилки.
2. BOOL WINAPI GetFileSizeEx( 
	__in HANDLE hFile, 
	__out PLARGE_INTEGER lpFileSize
	//  (LowPart, HighPart, QuadPart )
);
Описание слайда:
СТАНДАРТНІ ФУНКЦІЇ ДЛЯ ВИЗНАЧЕННЯ РОЗМІРУ ФАЙЛУ 1. DWORD WINAPI GetFileSize( __in HANDLE hFile, // Дескриптор файлу __out LPDWORD lpFileSizeHigh //старша частина розміру ); Недолік: не можна узнати про наявність помилки. 2. BOOL WINAPI GetFileSizeEx( __in HANDLE hFile, __out PLARGE_INTEGER lpFileSize // (LowPart, HighPart, QuadPart ) );

Слайд 5





СТАНДАРТНІ ФУНКЦІЇ ДЛЯ ВИЗНАЧЕННЯ РОЗМІРУ ФАЙЛУ. ПРИКЛАД
LARGE_INTEGER liFileSize
BOOL b = GetFileSizeEx (h, & liFileSize);
if (b)
	_tprintf (_T(“%I64d\n”), 			liFileSize.QuadPart);
else _tprintf (_T(“Error\n”));
Недолік. Для визначення розміру файлу треба його відкривати.
Описание слайда:
СТАНДАРТНІ ФУНКЦІЇ ДЛЯ ВИЗНАЧЕННЯ РОЗМІРУ ФАЙЛУ. ПРИКЛАД LARGE_INTEGER liFileSize BOOL b = GetFileSizeEx (h, & liFileSize); if (b) _tprintf (_T(“%I64d\n”), liFileSize.QuadPart); else _tprintf (_T(“Error\n”)); Недолік. Для визначення розміру файлу треба його відкривати.

Слайд 6





ВИЗНАЧЕННЯ РОЗМІРУ ФАЙЛУ ТА ВІЛЬНОГО МІСЦЯ НА ДИСКУ
Приклад. Додати до функції копіювання необхідні оператори для перевірки наявності вільного місця
LARGE_INTEGER NeedSize; // Потрібне місце
ULARGE_INTEGER Free, Total, Available;
b = GetFileSizeEx (hIn, &NeedSize);
if (b) b = GetDiskFreeSpaceEx( 0, &Free, &Total, &Available);
b = NeedSize.QuadPart <= Available.QuadPart;
Описание слайда:
ВИЗНАЧЕННЯ РОЗМІРУ ФАЙЛУ ТА ВІЛЬНОГО МІСЦЯ НА ДИСКУ Приклад. Додати до функції копіювання необхідні оператори для перевірки наявності вільного місця LARGE_INTEGER NeedSize; // Потрібне місце ULARGE_INTEGER Free, Total, Available; b = GetFileSizeEx (hIn, &NeedSize); if (b) b = GetDiskFreeSpaceEx( 0, &Free, &Total, &Available); b = NeedSize.QuadPart <= Available.QuadPart;

Слайд 7





РОЗШИРЕНА ФУНКЦІЯ ДЛЯ РОБОТИ З ПОКАЗНИКАМИ
BOOL WINAPI SetFilePointerEx( 
__in HANDLE hFile, // дескриптор файлу
// Зміщення (до виконання операції)(64 біта)
__in LARGE_INTEGER liDistanceToMove, 
// Зміщення (після виконання операції)(64 біта) 
__out_opt PLARGE_INTEGER lpNewFilePointer, 
// Тип зміщення (FILE_BEGIN,  FILE_CURRENT,
// FILE_END)
__in DWORD dwMoveMethod 
);
Описание слайда:
РОЗШИРЕНА ФУНКЦІЯ ДЛЯ РОБОТИ З ПОКАЗНИКАМИ BOOL WINAPI SetFilePointerEx( __in HANDLE hFile, // дескриптор файлу // Зміщення (до виконання операції)(64 біта) __in LARGE_INTEGER liDistanceToMove, // Зміщення (після виконання операції)(64 біта) __out_opt PLARGE_INTEGER lpNewFilePointer, // Тип зміщення (FILE_BEGIN, FILE_CURRENT, // FILE_END) __in DWORD dwMoveMethod );

Слайд 8





РОЗШИРЕНА ФУНКЦІЯ ДЛЯ РОБОТИ З ПОКАЗНИКАМИ. ПРИКЛАД 1. 1
Приклад. Скласти функцію для заміни перших та останніх len байтів файлу, якщо розмір повинен бути більше ніж 2 *  len.
BOOL ChangeBytes (LPCTSTR fName, DWORD len)
{
// Відкриття файлу
// Перевірка умови: розмір повинен бути більше ніж 2 *  len
// Виділення пам'яті для 2 *  len даних
// Читання перших len байтів
// Встановлення показника на останні байти
// Читання останніх len байтів
// Встановлення показника на початок останніх байтів
// Запис останніх len байтів
// Встановлення показника на початок файлу
// Запис перших len байтів
// Визволення пам'яті
// Закриття файлу
Описание слайда:
РОЗШИРЕНА ФУНКЦІЯ ДЛЯ РОБОТИ З ПОКАЗНИКАМИ. ПРИКЛАД 1. 1 Приклад. Скласти функцію для заміни перших та останніх len байтів файлу, якщо розмір повинен бути більше ніж 2 * len. BOOL ChangeBytes (LPCTSTR fName, DWORD len) { // Відкриття файлу // Перевірка умови: розмір повинен бути більше ніж 2 * len // Виділення пам'яті для 2 * len даних // Читання перших len байтів // Встановлення показника на останні байти // Читання останніх len байтів // Встановлення показника на початок останніх байтів // Запис останніх len байтів // Встановлення показника на початок файлу // Запис перших len байтів // Визволення пам'яті // Закриття файлу

Слайд 9





РОЗШИРЕНІ ФУНКЦІЇ ДЛЯ РОБОТИ З ПОКАЗНИКАМИ. ПРИКЛАД 1. 2
// Відкриття файлу
HANDLE h = CreateFile (fName, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ, 0,  OPEN_EXISTING,  0, 0);
// Перевірка умови: розмір повинен бути більше ніж 2 *  len
b = h != IHV;
LARGE_INTEGER liSize;
if (b)	{
	PBYTE pMem = 0, pMem1, pMem2; 
	b = GetFileSizeEx (h, &liSize);
}
b = b && liSize.QuadPart >= 2 * len;
// Виділення пам'яті для 2 *  len даних
Описание слайда:
РОЗШИРЕНІ ФУНКЦІЇ ДЛЯ РОБОТИ З ПОКАЗНИКАМИ. ПРИКЛАД 1. 2 // Відкриття файлу HANDLE h = CreateFile (fName, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0); // Перевірка умови: розмір повинен бути більше ніж 2 * len b = h != IHV; LARGE_INTEGER liSize; if (b) { PBYTE pMem = 0, pMem1, pMem2; b = GetFileSizeEx (h, &liSize); } b = b && liSize.QuadPart >= 2 * len; // Виділення пам'яті для 2 * len даних

Слайд 10





РОЗШИРЕНІ ФУНКЦІЇ ДЛЯ РОБОТИ З ПОКАЗНИКАМИ. ПРИКЛАД 1. 3
// Виділення пам'яті для 2 *  len даних
using namespace std;
…
PBYTE pMem = 0, pMem1, pMem2; 
try	{
	pMem = new BYTE [2 * len]; 
	pMem1 = pMem; 	pMem2 = pMem + len;
}
catch (std::bad_alloc&)
{
		b = FALSE; pMem = 0;
}
Описание слайда:
РОЗШИРЕНІ ФУНКЦІЇ ДЛЯ РОБОТИ З ПОКАЗНИКАМИ. ПРИКЛАД 1. 3 // Виділення пам'яті для 2 * len даних using namespace std; … PBYTE pMem = 0, pMem1, pMem2; try { pMem = new BYTE [2 * len]; pMem1 = pMem; pMem2 = pMem + len; } catch (std::bad_alloc&) { b = FALSE; pMem = 0; }

Слайд 11





РОЗШИРЕНІ ФУНКЦІЇ ДЛЯ РОБОТИ З ПОКАЗНИКАМИ. ПРИКЛАД 1. 4
// Читання перших len байтів
if (b) b = ReadFile (h, pMem1, len, &dwCount, 0);
// Встановлення показника на останні байти
LARGE_INTEGER liFirst = {0, 0}, liSecond = {-len, -1}, liTemp;
if (b) b = SetFilePointerEx (h, liSecond, &liTemp, FILE_END);
// Читання останніх len байтів
if (b) b = ReadFile (h, pMem2, len, &dwCount, 0);
// Встановлення показника на початок останніх байтів
if (b) b = SetFilePointerEx (h, liSecond, &liTemp, FILE_END);
// Запис останніх len байтів
if (b) b = WriteFile (h, pMem1, len, &dwCount, 0);
// Встановлення показника на початок файлу
if (b) b = SetFilePointerEx (h, liFirst, &liTemp, FILE_BEGIN);
// Запис перших len байтів
if (b) b = WriteFile (h, pMem2, len, &dwCount, 0);
Описание слайда:
РОЗШИРЕНІ ФУНКЦІЇ ДЛЯ РОБОТИ З ПОКАЗНИКАМИ. ПРИКЛАД 1. 4 // Читання перших len байтів if (b) b = ReadFile (h, pMem1, len, &dwCount, 0); // Встановлення показника на останні байти LARGE_INTEGER liFirst = {0, 0}, liSecond = {-len, -1}, liTemp; if (b) b = SetFilePointerEx (h, liSecond, &liTemp, FILE_END); // Читання останніх len байтів if (b) b = ReadFile (h, pMem2, len, &dwCount, 0); // Встановлення показника на початок останніх байтів if (b) b = SetFilePointerEx (h, liSecond, &liTemp, FILE_END); // Запис останніх len байтів if (b) b = WriteFile (h, pMem1, len, &dwCount, 0); // Встановлення показника на початок файлу if (b) b = SetFilePointerEx (h, liFirst, &liTemp, FILE_BEGIN); // Запис перших len байтів if (b) b = WriteFile (h, pMem2, len, &dwCount, 0);

Слайд 12





РОЗШИРЕНІ ФУНКЦІЇ ДЛЯ РОБОТИ З ПОКАЗНИКАМИ. ПРИКЛАД 1. 5
Використання функції ChangeBytes:
TCHAR *fName = _T("x.txt");
	b =  ChangeBytes (fName, 10);
	_tprintf (_T("ChangeBytes: %s\n"), b? _T("Yes") : _T("No")); 
// Файл x.txt треба розташувати в папці, де знаходиться файл  проекту з розширенням vcproj.
Відповідь: Yes
Стан файлу x.txt  до зміни:
222222222244444444444441111111111
Стан файлу x.txt  після зміни:
111111111144444444444442222222222
Описание слайда:
РОЗШИРЕНІ ФУНКЦІЇ ДЛЯ РОБОТИ З ПОКАЗНИКАМИ. ПРИКЛАД 1. 5 Використання функції ChangeBytes: TCHAR *fName = _T("x.txt"); b = ChangeBytes (fName, 10); _tprintf (_T("ChangeBytes: %s\n"), b? _T("Yes") : _T("No")); // Файл x.txt треба розташувати в папці, де знаходиться файл проекту з розширенням vcproj. Відповідь: Yes Стан файлу x.txt до зміни: 222222222244444444444441111111111 Стан файлу x.txt після зміни: 111111111144444444444442222222222

Слайд 13





РОЗШИРЕНІ ФУНКЦІЇ ДЛЯ РОБОТИ З ПОКАЗНИКАМИ. ПРИКЛАД 2
Скоротити розмір файлу на задане значення. Якщо розмір файлу менше, то скоротити до нульової довжини
BOOL ChangeFileSize (LPCTSTR fName, __int64 size)
{
	BOOL b;
	HANDLE h = CreateFile (fName, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0);
	b = h != IHV;
	if (b) {
		LARGE_INTEGER liSize, liTemp;
		b = GetFileSizeEx (h, &liSize);
		if (b){
			liSize.QuadPart = liSize.QuadPart < size ? 0 : liSize.QuadPart - size;
			b = SetFilePointerEx (h, liSize, &liTemp, FILE_BEGIN);
			if (b) b = SetEndOfFile (h);
		}
		CloseHandle (h);
	}
	return b;
}
Описание слайда:
РОЗШИРЕНІ ФУНКЦІЇ ДЛЯ РОБОТИ З ПОКАЗНИКАМИ. ПРИКЛАД 2 Скоротити розмір файлу на задане значення. Якщо розмір файлу менше, то скоротити до нульової довжини BOOL ChangeFileSize (LPCTSTR fName, __int64 size) { BOOL b; HANDLE h = CreateFile (fName, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0); b = h != IHV; if (b) { LARGE_INTEGER liSize, liTemp; b = GetFileSizeEx (h, &liSize); if (b){ liSize.QuadPart = liSize.QuadPart < size ? 0 : liSize.QuadPart - size; b = SetFilePointerEx (h, liSize, &liTemp, FILE_BEGIN); if (b) b = SetEndOfFile (h); } CloseHandle (h); } return b; }

Слайд 14





ФУНКЦІЇ ДЛЯ РОБОТИ З ПОКАЗНИКАМИ. ПРИКЛАД 3.1
Створити “базу даних” з записами різної довжини. Кожний запис має формат: довжина запису, сам запис.
Створити індексний файл, в якому для кожного запису визначити зміщення в “базі даних”.
Визначити функцію для отримання запису з заданим номером.
Описание слайда:
ФУНКЦІЇ ДЛЯ РОБОТИ З ПОКАЗНИКАМИ. ПРИКЛАД 3.1 Створити “базу даних” з записами різної довжини. Кожний запис має формат: довжина запису, сам запис. Створити індексний файл, в якому для кожного запису визначити зміщення в “базі даних”. Визначити функцію для отримання запису з заданим номером.

Слайд 15





ФУНКЦІЇ ДЛЯ РОБОТИ З ПОКАЗНИКАМИ. ПРИКЛАД 3.2
Створення “бази даних”. Хай записами є рядки з символами.
BOOL CreateDB  (TCHAR *fName, TCHAR *s[], size_t n){
	HANDLE h = CreateFile (fName, GW, FSR, 0, OA, 0, 0);
	DWORD dwCount; BOOL b = h!= IHV;
	if (b)	{
		for (size_t i = 0; i < n; ++i)	{
			size_t len = (_tcslen (s [i]) + 1) * sizeof (TCHAR);
			b = WriteFile (h, &len, sizeof (len), &dwCount, 0);
			if (b)   b = WriteFile (h, s[i], len, &dwCount, 0);
			if (!b)  break;
		}
		CloseHandle (h);
	}
	return b;
}
Описание слайда:
ФУНКЦІЇ ДЛЯ РОБОТИ З ПОКАЗНИКАМИ. ПРИКЛАД 3.2 Створення “бази даних”. Хай записами є рядки з символами. BOOL CreateDB (TCHAR *fName, TCHAR *s[], size_t n){ HANDLE h = CreateFile (fName, GW, FSR, 0, OA, 0, 0); DWORD dwCount; BOOL b = h!= IHV; if (b) { for (size_t i = 0; i < n; ++i) { size_t len = (_tcslen (s [i]) + 1) * sizeof (TCHAR); b = WriteFile (h, &len, sizeof (len), &dwCount, 0); if (b) b = WriteFile (h, s[i], len, &dwCount, 0); if (!b) break; } CloseHandle (h); } return b; }

Слайд 16





ФУНКЦІЇ ДЛЯ РОБОТИ З ПОКАЗНИКАМИ. ПРИКЛАД 3.3
Створення індексного файлу (зміщення для початку записів)
BOOL CreateIndexBD  (TCHAR *DBName, TCHAR *DBIndex) {
	DWORD dwCount;
	HANDLE h1 = CreateFile (DBName, GR, FSR, 0, OE, 0, 0);
	HANDLE h2 = CreateFile (DBIndex, GW, FSR, 0, OA, 0, 0);
	BOOL b = h1!= IHV && h2 != IHV; 
	if (b)	{
		size_t len;  size_t offset = 0;
		for (size_t i = 0; ; i++)	 {
			if (b) b = WriteFile (h2, &offset, sizeof (size_t), &dwCount, 0);
			if (b){
				b = ReadFile (h1, &len, sizeof (size_t), &dwCount, 0);
				if (dwCount == 0) break;
				SetFilePointer (h1, len, 0, FILE_CURRENT);
				offset += len + sizeof (size_t); 
			}
		}
	}
	if (h1) CloseHandle (h1); 	if (h2) CloseHandle (h2); return b;
}
Описание слайда:
ФУНКЦІЇ ДЛЯ РОБОТИ З ПОКАЗНИКАМИ. ПРИКЛАД 3.3 Створення індексного файлу (зміщення для початку записів) BOOL CreateIndexBD (TCHAR *DBName, TCHAR *DBIndex) { DWORD dwCount; HANDLE h1 = CreateFile (DBName, GR, FSR, 0, OE, 0, 0); HANDLE h2 = CreateFile (DBIndex, GW, FSR, 0, OA, 0, 0); BOOL b = h1!= IHV && h2 != IHV; if (b) { size_t len; size_t offset = 0; for (size_t i = 0; ; i++) { if (b) b = WriteFile (h2, &offset, sizeof (size_t), &dwCount, 0); if (b){ b = ReadFile (h1, &len, sizeof (size_t), &dwCount, 0); if (dwCount == 0) break; SetFilePointer (h1, len, 0, FILE_CURRENT); offset += len + sizeof (size_t); } } } if (h1) CloseHandle (h1); if (h2) CloseHandle (h2); return b; }

Слайд 17





ФУНКЦІЇ ДЛЯ РОБОТИ З ПОКАЗНИКАМИ. ПРИКЛАД 3.4
Отримання запису по його номеру
size_t ReadDBRecord  (TCHAR *DBName, TCHAR *DBIndex, size_t i, TCHAR * Rec){
	size_t res = 0; DWORD dwCount;
	HANDLE h1 = CreateFile (DBName, GR, FSR, 0, OE, 0, 0), 
		h2 = CreateFile (DBIndex, GR, FSR, 0, OE, 0, 0);
	BOOL b = h1!= IHV && h2 != IHV;
	if (b){
		DWORD dwRecs = GetFileSize (h2, 0) / sizeof (size_t);
		b = dwRecs > i;
		if (b){
			size_t offset;  SetFilePointer (h2, i * sizeof (size_t), 0, FILE_BEGIN);
			b = ReadFile (h2 ,&offset,  sizeof (size_t), &dwCount, 0);
			if (b){
				SetFilePointer (h1, offset, 0, FILE_BEGIN);
				b = ReadFile (h1, &res, sizeof (size_t), &dwCount, 0);
			}
			if (b && Rec != 0) b = ReadFile (h1, Rec, res, &dwCount, 0);
		}
	}
	if (h1) CloseHandle (h1); if (h2) CloseHandle (h2);
	return res;}
Описание слайда:
ФУНКЦІЇ ДЛЯ РОБОТИ З ПОКАЗНИКАМИ. ПРИКЛАД 3.4 Отримання запису по його номеру size_t ReadDBRecord (TCHAR *DBName, TCHAR *DBIndex, size_t i, TCHAR * Rec){ size_t res = 0; DWORD dwCount; HANDLE h1 = CreateFile (DBName, GR, FSR, 0, OE, 0, 0), h2 = CreateFile (DBIndex, GR, FSR, 0, OE, 0, 0); BOOL b = h1!= IHV && h2 != IHV; if (b){ DWORD dwRecs = GetFileSize (h2, 0) / sizeof (size_t); b = dwRecs > i; if (b){ size_t offset; SetFilePointer (h2, i * sizeof (size_t), 0, FILE_BEGIN); b = ReadFile (h2 ,&offset, sizeof (size_t), &dwCount, 0); if (b){ SetFilePointer (h1, offset, 0, FILE_BEGIN); b = ReadFile (h1, &res, sizeof (size_t), &dwCount, 0); } if (b && Rec != 0) b = ReadFile (h1, Rec, res, &dwCount, 0); } } if (h1) CloseHandle (h1); if (h2) CloseHandle (h2); return res;}

Слайд 18





ФУНКЦІЇ ДЛЯ РОБОТИ З ПОКАЗНИКАМИ. ПРИКЛАД 3.5
Головна програма:
…
TCHAR *s[] = {_T("1"), _T("22"), _T("333"), _T("4444"), _T("55555"), _T("666666"), _T("7777777")};
// Створення “бази даних”	
b = CreateDB  (_T("BD.bin"), s, sizeof (s)/ sizeof (TCHAR*));
// Створення індексів для “бази даних”	
if (b) 	b = CreateIndexDB  (_T("BD.bin"), _T("BD.ind"));
// Отримання довжини запису, а потім і запису
if (b){
		size_t len = ReadDBRecord  (_T("BD.bin"), _T("BD.ind"), 4, 0);	
		TCHAR *rec = new TCHAR [len / sizeof (TCHAR)];
		ReadDBRecord  (_T("BD.bin"), _T("BD.ind"), 4, rec);	
		_tprintf (_T("%s\n"), rec);
		delete []rec;
}
Описание слайда:
ФУНКЦІЇ ДЛЯ РОБОТИ З ПОКАЗНИКАМИ. ПРИКЛАД 3.5 Головна програма: … TCHAR *s[] = {_T("1"), _T("22"), _T("333"), _T("4444"), _T("55555"), _T("666666"), _T("7777777")}; // Створення “бази даних” b = CreateDB (_T("BD.bin"), s, sizeof (s)/ sizeof (TCHAR*)); // Створення індексів для “бази даних” if (b) b = CreateIndexDB (_T("BD.bin"), _T("BD.ind")); // Отримання довжини запису, а потім і запису if (b){ size_t len = ReadDBRecord (_T("BD.bin"), _T("BD.ind"), 4, 0); TCHAR *rec = new TCHAR [len / sizeof (TCHAR)]; ReadDBRecord (_T("BD.bin"), _T("BD.ind"), 4, rec); _tprintf (_T("%s\n"), rec); delete []rec; }

Слайд 19





ВИСНОВКИ
Розглянуті операції для роботи з показниками файлів та їх атрибутами.
При визначенні розміру файлу можна використовувати функції для відкритих файлів (GetFileSize, GetFileSizeEx), та без їх відкриття (GetFileAttributesEx). 
Є можливість зміни атрибутів файлів, що дає змогу запису в файли Тільки для читання, можна встановлювати атрибути пов'язані з компресією файлів та їх шифруванням, що буде розглянуто нижче.
Описание слайда:
ВИСНОВКИ Розглянуті операції для роботи з показниками файлів та їх атрибутами. При визначенні розміру файлу можна використовувати функції для відкритих файлів (GetFileSize, GetFileSizeEx), та без їх відкриття (GetFileAttributesEx). Є можливість зміни атрибутів файлів, що дає змогу запису в файли Тільки для читання, можна встановлювати атрибути пов'язані з компресією файлів та їх шифруванням, що буде розглянуто нижче.

Слайд 20





ПИТАННЯ ДЛЯ САМОСТІЙНОГО ВИВЧЕННЯ
Перевірити можливість зміни атрибутів файлів в залежності від списку доступу, який задається адміністратором. Зробить висновки.
Зробіть експеримент, в якому значення зміщення для функції SetFilePointer перевищує розмір файлу. Зробить висновок по зміні розміру файлу після такої операції.
Описание слайда:
ПИТАННЯ ДЛЯ САМОСТІЙНОГО ВИВЧЕННЯ Перевірити можливість зміни атрибутів файлів в залежності від списку доступу, який задається адміністратором. Зробить висновки. Зробіть експеримент, в якому значення зміщення для функції SetFilePointer перевищує розмір файлу. Зробить висновок по зміні розміру файлу після такої операції.

Слайд 21





МАТЕРІАЛИ ДЛЯ ЕКСПРЕС-КОНТРОЛЮ
Що таке показник файлу?
Де знаходиться показник файлу після виконання функції CreateFile?
 Яким чином організувати запис додаткових даних в кінець файлу, вставку додаткових  даних на початку файлу без руйнування попередніх даних.
В яких режимах треба відкривати файл, якщо потрібно змінити його розмір (зменшити, збільшити)
Які атрибути файлів ви знаєте, як можна змінити атрибути файлу в середовищі, де ви працюєте?
 Наведіть приклад необхідності програмної зміни атрибутів.
Додайте до класу для роботи з файлом функцію для визначення розміру файлу та поточного положення показника.
Описание слайда:
МАТЕРІАЛИ ДЛЯ ЕКСПРЕС-КОНТРОЛЮ Що таке показник файлу? Де знаходиться показник файлу після виконання функції CreateFile? Яким чином організувати запис додаткових даних в кінець файлу, вставку додаткових даних на початку файлу без руйнування попередніх даних. В яких режимах треба відкривати файл, якщо потрібно змінити його розмір (зменшити, збільшити) Які атрибути файлів ви знаєте, як можна змінити атрибути файлу в середовищі, де ви працюєте? Наведіть приклад необхідності програмної зміни атрибутів. Додайте до класу для роботи з файлом функцію для визначення розміру файлу та поточного положення показника.



Похожие презентации
Mypresentation.ru
Загрузить презентацию