Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторні роботи з ОС (win32API).doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
194.56 Кб
Скачать

Лабораторна робота 5 Тема: Файлові системи і операції з файлами і каталогами

Завдання:

1.Дослідити роботу програми.

2.Описати документацію на типи даних, структури та функції win32 api, які використовуються в програмі.

3.За завданням викладача розробити власний проект на основі існуючого. Функції Win32api для файлових операцій

//---------------------------------------------------------------------------

#include <vcl.h>

#include <StrUtils.hpp>

#pragma hdrstop

#include "UShFile.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

void __fastcall TForm1::BFind1Click(TObject *Sender)

{

int i;

OpenDialog1->Options = OpenDialog1->Options << ofAllowMultiSelect;

if (OpenDialog1->Execute())

{

ESource->Text="";

for (i=1; i <= OpenDialog1->Files->Count;i++)

ESource->Text = ESource->Text +

OpenDialog1->Files->Strings[i-1] + ";";

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::BFind2Click(TObject *Sender)

{

OpenDialog1->Options = OpenDialog1->Options >>ofAllowMultiSelect;

if (OpenDialog1->Execute())

ETarget->Text = OpenDialog1->FileName;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)

{

SHFILEOPSTRUCT SHF;

AnsiString SFrom, STo;

SFrom = ESource->Text + "\0\0";

SFrom = AnsiReplaceStr(SFrom, ';', '\0');

STo = ETarget->Text + "\0\0";

SHF.hwnd = 0;

SHF.pFrom = SFrom.c_str();

SHF.pTo = STo.c_str();

SHF.fFlags = FOF_ALLOWUNDO;

if (!CheckBox1->Checked)

SHF.fFlags = (SHF.fFlags | FOF_NOCONFIRMATION);

if (CheckBox2->Checked)

SHF.fFlags = (SHF.fFlags | FOF_NOCONFIRMMKDIR);

switch( RadioGroup1->ItemIndex)

{

case 0: SHF.wFunc = FO_COPY;

break;

case 1: SHF.wFunc = FO_MOVE;

break;

case 2: SHF.wFunc = FO_RENAME;

break;

case 3: SHF.wFunc = FO_DELETE;

}

if (RadioGroup2->ItemIndex == 1)

SHF.fFlags = SHF.fFlags | FOF_RENAMEONCOLLISION;

if (RadioGroup3->ItemIndex == 2)

SHF.fFlags = SHF.fFlags | FOF_SILENT;

else if (RadioGroup3->ItemIndex == 1)

{

SHF.fFlags = SHF.fFlags | FOF_SIMPLEPROGRESS;

SHF.lpszProgressTitle = "Пожалуйста, подождите";

}

//

if( SHFileOperation(&SHF) != 0)

if (SHF.fAnyOperationsAborted)

ShowMessage(

"Выполнение операции прервано пользователем");

else ShowMessage("Ошибка выполнения операции");

else ShowMessage("Операция успешно завершена");

}

//---------------------------------------------------------------------------

void __fastcall TForm1::ApplicationEvents1ShowHint(AnsiString &HintStr,

bool &CanShow, THintInfo &HintInfo)

{

if (AnsiString(HintInfo.HintControl->ClassName()) == "TEdit")

if (Label1->Canvas->TextWidth(

((TEdit *)HintInfo.HintControl)->Text) >

HintInfo.HintControl->ClientWidth)

{

HintStr = ((TEdit *)HintInfo.HintControl)->Text;

ApplicationEvents1->CancelDispatch();

}

}