Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Otchet_3 (2).docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.15 Mб
Скачать

Void GetFTime(char *s)

{

FILETIME creationTime, lastAccessTime, lastWriteTime;

SYSTEMTIME localCreationTime, localAccessTime, localWriteTime, UTClocalCreationTime, UTClocalAccessTime, UTClocalWriteTime;

HANDLE FileHandle = CreateFileA(s, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE,

NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);

if (!GetFileTime(FileHandle, &creationTime, &lastAccessTime, &lastWriteTime))

{

cout << "Error!";

return;

}

else

{

if (!FileTimeToSystemTime(&creationTime, &UTClocalCreationTime))

{

cout << "\nError creation time!";

return;

}

else

{

SystemTimeToTzSpecificLocalTime(NULL, &UTClocalCreationTime, &localCreationTime);

cout << "\nCreation time: " << localCreationTime.wDay << "." << localCreationTime.wMonth << "." << localCreationTime.wYear

<< ' ' << localCreationTime.wHour << ":" << localCreationTime.wMinute << ":" << localCreationTime.wSecond;

}

if (!FileTimeToSystemTime(&lastAccessTime, &UTClocalAccessTime))

{

cout << "\nError last access time!";

return;

}

else

{

SystemTimeToTzSpecificLocalTime(NULL, &UTClocalAccessTime, &localAccessTime);

cout << "\nLast access time: " << localAccessTime.wDay << "." << localAccessTime.wMonth << "." << localAccessTime.wYear

<< ' ' << localAccessTime.wHour << ":" << localAccessTime.wMinute << ":" << localAccessTime.wSecond;

}

if (!FileTimeToSystemTime(&lastWriteTime, &UTClocalWriteTime))

{

cout << "\nError last write time!";

return;

}

else

{

SystemTimeToTzSpecificLocalTime(NULL, &UTClocalWriteTime, &localWriteTime);

cout << "\nLast write time: " << localWriteTime.wDay << "." << localWriteTime.wMonth << "." << localWriteTime.wYear

<< ' ' << localWriteTime.wHour << ":" << localWriteTime.wMinute << ":" << localWriteTime.wSecond;

}

}

CloseHandle(FileHandle);

}

Void SetFTime(char *s)

{

FILETIME fTime, fCreationTime;

SYSTEMTIME sTime, sCreationTime;

HANDLE FileHandle = CreateFileA(s, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE,

NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);

GetSystemTime(&sTime);

SystemTimeToFileTime(&sTime, &fTime);

if (!SetFileTime(FileHandle, &fTime, &fTime, &fTime))

{

cout << "\nError!";

return;

}

else

cout << "\nTime was changed!";

CloseHandle(FileHandle);

}

3.2 Копирование файла с помощью операций перекрывающегося ввода-вывода.

Проверка программы.

Графики зависимости времени от размера блока копируемых данных и количества перекрывающихся операций.

Размер копируемого файла 800 Мб.

График зависимости времени от количества перекрывающихся операций для размера блока 4 МБ:

Анализ приложения и его объектов.

Вывод: в ходе работы было написано приложение, которое позволяет копировать файл, «одновременно» выполняя несколько перекрывающихся операций ввода-вывода.

Был построен график зависимости времени от размера копируемых блоков, из которого видно, что при увеличении размера блока время уменьшается; также был построен график зависимости времени от количества перекрывающихся операций для блоков размером 4 Мбайта, по которому можно определить оптимальное количество перекрывающихся операций.

Был проведен анализ объектов, используемых приложением с помощью утилиты LiveKD.

Код программы.

#include <iostream>

#include <conio.h>

#include <Windows.h>

#pragma comment(lib, "winmm.lib")

using namespace std;

int BLOCK_SIZE, MAX_OVR;

HANDLE inFileHandle, outFileHandle;

OVERLAPPED *ovrIn, *ovrOut;

CHAR **buf;

LONGLONG nRecords, nDoneRead, nDoneWrite;

LARGE_INTEGER fileSize;

VOID WINAPI ReadCallback(DWORD error, DWORD countOfBytes, LPOVERLAPPED pOvr);

VOID WINAPI WriteCallback(DWORD error, DWORD countOfBytes, LPOVERLAPPED pOvr);

HANDLE CreateF(bool);

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