Лістинг “UnitSave.cpp”
#include <vcl.h>
#pragma hdrstop
#include "UnitSave.h"
#include "UnitChat.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TSaveF *SaveF;
TMemoryStream *MSCl = new TMemoryStream ; // создаем поток под принимаемый файл
void Write( AnsiString Text ); // ф-я записи получаемой информации в поток
int Size ; // размер передаваемого файла
bool Receive ; // передаем ли мы на данный момент файл
AnsiString FileName ;
String Name;
//---------------------------------------------------------------------------
__fastcall TSaveF::TSaveF(TComponent* Owner)
: TForm(Owner)
{
}
void Write( AnsiString Text )
{
if(MSCl->Size < Size) // если мы еще принимаем файл и размер потока меньше размера файла
{
MSCl->Write( Text.c_str() , Text.Length() ); // записываем в поток
SaveF->Memo1->Lines->Add( "Принимаем данные..." ); // пишем лог
}
if(MSCl->Size == Size) // если файл принят и размер потока соответствует размеру файла
{
Receive = false ; // останавливаем режим передачи
MSCl->Position = 0 ; // переводим каретку потока в начало
SaveF->Client->Socket->SendText( "end" ); // пишем серверу, что мы приняли файл
CreateDir( "Downloads" ); // создаем папку для сохраненных файлов
MSCl->SaveToFile( "Downloads\\"+FileName ); // сохраняем туда наш файл
MSCl->Clear() ; // освобождаем поток
Size = 0 ;
SaveF->Memo1->Lines->Add("Файл принят !"); // пишем в лог что файл принят
}
}
//---------------------------------------------------------------------------
void __fastcall TSaveF::ClientRead(TObject *Sender,