unit mGetStream;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdBaseComponent, IdComponent, IdTCPServer, StdCtrls;
type
TGetStream =
class(TForm)
IdTCPServer1: TIdTCPServer;
SaveDialog1: TSaveDialog;
btaktivieren: TButton;
edPfad: TEdit;
edFilter: TEdit;
lbFilter: TLabel;
lbPfad: TLabel;
edFilename: TEdit;
lbFilename: TLabel;
procedure IdTCPServer1Execute(AThread: TIdPeerThread);
procedure btaktivierenClick(Sender: TObject);
private
{ Private-Deklarationen }
function trueFilename (Filename :TFilename) :tFilename;
function filter (Filename :TFilename) :
string;
public
{ Public-Deklarationen }
end;
var
GetStream: TGetStream;
implementation
{$R *.dfm}
//idTCPServer1 OnExecute:_______________________________________________________
procedure TGetStream.IdTCPServer1Execute(AThread: TIdPeerThread);
var
fs: TFileStream;
SizeOfIncomingStream: integer;
Filename :TFilename;
begin
//######################################
Filename := Athread.Connection.ReadLn ;
//trueFilename ist eine Funktion, die aus dem Pfad den Dateinamen filtert
SaveDialog1.filename := truefilename (Filename);
//SaveFilter ist eine Methode, um die Endung der Datei zu bestimmen
SaveDialog1.Filter := filter (Filename);
edPfad.text := filename;
edFilename.text := SaveDialog1.Filename;
edFilter.text := SaveDialog1.Filter;
//######################################
//Der SaveDialog wird ausgeführt und die Datei wird gespeichert.
if not SaveDialog1.Execute
then exit;
fs := TFileStream.Create(SaveDialog1.Filename, fmCreate
or fmShareExclusive);
with AThread.Connection
do
try
SizeOfIncomingStream := ReadInteger;
ReadStream(fs, SizeOfIncomingStream);
finally
Disconnect;
fs.Free;
end;
end;
//Ende IdTCPServer1 OnExecute___________________________________________________
//Funktionen:___________________________________________________________________
//trueFilename ist eine Funktion, die aus dem Pfad den Dateinamen filtert
function TGetStream.trueFilename(Filename :TFilename):tFilename;
var backslash :boolean;
i :integer;
begin
i := 0;
backslash := false;
//Der Dateiname ohne Pfaangabe wird gefilter
while backslash= false
do
begin
if copy (Filename,length (Filename)-i,1) = '
\'
then begin
trueFilename := copy (Filename,length (Filename)-i+1,i);
backslash := true
end
else i := i+1;
end;
end;
//Filter ist eine Funktion die im Filename nach der Endung sucht
function TGetStream.Filter (Filename :TFilename) :
string;
var dot :boolean;
i :integer;
begin
i:= 0;
dot := false;
while dot= false
do
begin
if copy (Filename,length (Filename)-i,1) = '
.'
then begin
filter := '
*.'+copy (Filename,length (Filename)-i+1,i)+
'
|'+copy (Filename,length (Filename)-i+1,i);
dot := true
end
else i := i+1;
end;
end;
//Ende der Funktionen___________________________________________________________
//Serverstart:__________________________________________________________________
procedure TGetStream.btaktivierenClick(Sender: TObject);
begin
if btaktivieren.Caption = '
Server aktivieren'
then begin
idtcpServer1.active := true;
showmessage ('
Dienst gestartet');
btaktivieren.Caption := '
Server deaktivieren'
end
else begin
idtcpServer1.active := false;
btaktivieren.Caption := '
Server aktivieren'
end;
end;
//Ende Serverstart______________________________________________________________
end.