Докачка файлов по сети (NetBios)
Автор: http://forum.vingrad.ru
Мне вот все интересно было...думал проги, которые файлы по сети докачивают как-то хитро с нетбиосом работают...И вот решил попробовать написать нечто подобное...Токо похоже все они ( проги ) про нетбиос и слыхом не слыхивали...нашел простейшее решение этой проблемы...
Код некрасивый, потому как писал чисто для проверки...более того, тут надо переписать его весь, но общий смысл должен быть понятен...я разочарован :((
procedure TForm1.Button1Click(Sender: TObject);
var
Stream,
Stream1: TFileStream;
Temp: array[0..$FFFF] of Byte;
Access: Integer;
FileNames, Filenames1: string;
begin
with TOpenDialog.Create(Form1) do
begin
Execute;
FileNames := FileName;
Free;
end;
if Filenames = '' then
Exit;
with TSaveDialog.Create(Form1) do
begin
Execute;
FileNames1 := FileName;
Free;
end;
if Filenames1 = '' then
Exit;
Access := fmOpenReadWrite;
ZeroMemory(@Temp, sizeof(Temp));
Stream := TFileStream.Create(FileNames, fmOpenRead);
if not FileExists(Filenames1) then
Access := fmCreate;
Stream1 := TFileStream.Create(Filenames1, Access);
Gauge1.MaxValue := Stream.Size;
Stream.Position := Stream1.Size;
Stream1.Position := Stream1.Size;
Label1.Caption := IntToStr(Stream1.Position);
Label2.Caption := IntToStr(Stream.Size);
Gauge1.Progress := Stream.Position;
while Stream.Size <> Stream1.Size do
begin
if (Stream.Size - Stream1.Position) < sizeof(Temp) then
begin
Stream1.CopyFrom(Stream, Stream.Size - Stream1.Position);
end
else
Stream1.CopyFrom(Stream, sizeof(Temp));
Gauge1.Progress := Stream.Position;
Label1.Caption := IntToStr(Stream.Position);
Label2.Caption := IntToStr(Stream.Size);
Form1.Update;
Application.ProcessMessages;
end;
Stream.Free;
Stream1.Free;
end;
|