|
Вопрос # 1 333/ вопрос открыт / |
|
Доброго времени суток, уважаемые эксперты!
Поправте код, по окончании получения файла сильно
зависает форма
Приложение: Переключить в обычный режим- procedure TForm1.Download2Click(Sender: TObject);
- var
- FDataStream : TStream;
- begin
- if FTP.Active then
- begin
- if edit1.Text+'/'+LView.Selected.Caption = '' then
- begin
- ShowMessage(sNoParameter);
- end
- else
- begin
- Save1.Filename := ExtractFileName(edit1.Text+'/'+LView.Selected.Caption);
- if Save1.Execute then
- try
- Application.ProcessMessages;
- FDataStream := TFileStream.Create(Save1.Filename, fmCreate,fmOpenReadWrite);
- try
-
- //ProgressBar1..Min := 0;
- try
- try
- Application.ProcessMessages;
- FTP.Receive(edit1.Text+'/'+LView.Selected.Caption, FDataStream, 0, 0);
- finally
- end;
- except
- on E : EOperationCancelledError do ;
- end;
- ProgressBar1.PartsComplete := 0;
-
- finally
- FDataStream.Free;
- end;
- except
- on E : Exception do
- Log(E.Message, true);
- end;
- end;
- end
- else
- Log(sNotConnected, true);
- end;
 |
Вопрос задал: Vit2 (статус: Посетитель)
Вопрос отправлен: 11 февраля 2008, 21:39
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 3; последнее сообщение — 14 февраля 2008, 22:17; участников в обсуждении: 3.
|
min@y™ (статус: Доктор наук), 12 февраля 2008, 08:32 [#1]:
А ты уверен, что виснет ПОСЛЕ получения файла? А не ВО ВРЕМЯ его получения, случайно? Мне от чего-то кажется, что проблема в строке
FTP.Receive(edit1.Text+'/'+LView.Selected.Caption, FDataStream, 0, 0);
Т.е. пока файло качается, прога и не реагирует. Советую прогнать под отладчиком.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Dron (статус: Студент), 14 февраля 2008, 20:55 [#2]:
1) Вы не указали, что за компонент FTP. От этого зависит многое. Быть может, в нём есть функция синхронизации при загрузке файла, а может и нет.
2) Соглашусь с min@y: проблема в вызове метода Receive.
3) Случайно обратил внимание на строку
if edit1.Text+'/'+LView.Selected.Caption = '' then
А вы не отдаёте себе отчёт в том, что даже если 1 и 3 строки пустые, то, прибавляя к ним слеш, результирующая строка уже не будет пустой?
С уважением.
|
|
Vit2 (статус: Посетитель), 14 февраля 2008, 22:17 [#3]:
procedure TForm1.Download2Click(Sender: TObject);
var
FDataStream : TStream;
begin
Save1.Filename := (LView.Selected.Caption);
if Save1.Execute then
try
Application.ProcessMessages;
FDataStream := TFileStream.Create(Save1.Filename, fmCreate);
try
Application.ProcessMessages;
FTP.Receive(FTP.GetCurrentDir+'/'+LView.Selected.Caption, FDataStream, 0, 0);
finally
FDataStream.Free;
end;
except
on E : Exception do
Log(E.Message, true);
end;
end;
После того как проходит зависание, пишет вот "Control channel transfer error" Компонент из колекции SecureBlackbox
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|