Передача файлов по локальной сети с использованием Tidtrivialftpserver и Tidtrivialftp. Я попробовал код примера и отлично работает, но Tidtrivialftpserver только начинает записывать файл, я хочу реализовать окно saveialog, чтобы я мог сохранить его на нужном месте. Я попытался следовать, но он записывает файл в текущий каталог. Также я не уверен в этой строке (AStream: = FS) в serverWriteFile, потому что, когда я отлаживаю этот код, Astream дает нуль, но все же записывает файл. Как?Передача файла P2P по TIdtrivialftp
var
file1: string;
FS: tfilestream;
procedure TForm2.saveClick(Sender: TObject);
begin
if savedialog1.Execute then
begin
savedialog1.FileName:= file1;
FS := TFileStream.Create(FileName,
fmCreate or fmShareExclusive);
end;
end;
procedure TForm2.serverWriteFile(Sender: TObject; var FileName: string;
const PeerInfo: TPeerInfo; var GrantAccess: Boolean; var AStream: TStream;
var FreeStreamOnComplete: Boolean);
begin
try
Memo1.Lines.Add('started writing files...');
file1 := ExtractFileName(Filename);
{ Open file in WRITE ONLY mode }
// FS := TFileStream.Create(FileName,
// fmCreate or fmShareExclusive);
{ Copy all the data }
AStream := FS;
{ Set parameters }
FreeStreamOnComplete := True;
GrantAccess := True;
except
{ On errors, deny access }
GrantAccess := False;
if Assigned(FS) then
FreeAndNil(FS);
end;
end;
Да, спасибо большое, это правильный путь, но я хочу, чтобы диалог сохранения был нажат кнопку «Сохранить» (по мере того, как кнопка сохранения файла становится видимой), но этим методом диалог появится сам по себе. – rafay
Вам не хватает точки. Когда сервер получает новый запрос на получение файла, он запускает событие 'OnWriteFile', чтобы узнать, где он может сохранить файл. Единственный способ, который вы можете запросить отдельно, - это сначала получить файл в файл temp или поток памяти, затем запросить, а затем переместить временный файл/память в выбранный пункт назначения после его полной загрузки. Это намного больше работы, чем просто запрос в событии «OnWriteFile» до начала загрузки. –