![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ICS
Dennis I. Komarov © (2007-12-11 12:50:00)При передаче через TFtpClient приходит изменение содержимого файла.
Процедуры передачи в dll
Никто такое не встречал? Может свойство какое?
Dennis I. Komarov (2007-12-11 16:15:00) [1]> [17] Lacmus © (11.12.07 16:08)
Стоит по умолчанию
Dennis I. Komarov (2007-12-11 16:14:00) [2]При вызове FTP.GET
Получаем файл - он отличается от исходного :(
Lacmus (2007-12-11 16:08:00) [3]>Может свойство какое?
Binary ?
Сергей М. (2007-12-11 15:48:00) [4]
> Он увеличивается в объеме
Что показывает пошаговая трассировка ?
На каком этапе выполнения твоегокода это происходит ?
Dennis I. Komarov (2007-12-11 15:27:00) [5]> [14] Сергей М. © (11.12.07 15:17)
Не одну ассинхронную процедуру не использовал.
На сколько я понял из примеров все использованные процедуры - синхронные
И как это может влиять на получающийся файл. Он увеличивается в объеме.
Сергей М. (2007-12-11 15:17:00) [6]У меня нет под рукой ICS, но подозреваю, что работа с компонентом идет в асинхр.режиме. Притом и события.
Dennis I. Komarov (2007-12-11 14:38:00) [7]> [12] Сергей М. © (11.12.07 14:22)
Ну вижу, а при чем тут события и результирующий файл?
Сергей М. (2007-12-11 14:22:00) [8]
> Dennis I. Komarov © (11.12.07 14:00) [11]
События в Инспекторе Объектов у TFtpClient видишь ?
Как думаешь, для чего они представлены ?
Dennis I. Komarov (2007-12-11 14:00:00) [9]> [10] Anatoly Podgoretsky © (11.12.07 13:56)
???
Anatoly Podgoretsky (2007-12-11 13:56:00) [10]Используется путь Дельфи - Driven Event Model
Сергей М. (2007-12-11 13:47:00) [11]
> Почему он пересылается с искожениями?
Вникать в код нет никакого желания.
Скорей всего потому, что ICS, в отличие от Инди, использует асинхронный транспорт с нотификациями.
Сергей М. (2007-12-11 13:44:00) [12]Что с этим добром делать ?)
Когда изволишь вопрос сформулировать ?
Dennis I. Komarov (2007-12-11 13:43:00) [13]> [3] Сергей М. © (11.12.07 13:34)
Почему он пересылается с искожениями?
Dennis I. Komarov (2007-12-11 13:42:00) [14]
library qftp;
uses
SysUtils,
Classes, Windows, Dialogs,
OverbyteIcsWndControl, OverbyteIcsFtpCli, OverbyteIcsLogger,
Sockets, ComCtrls;
const
rFileLog = '***\ics_r.log';
sFileLog = '***\ics_s.log';
ftpHost = '******';
ftpUsername = '******';
ftpPassword = '******';
{$R *.res}
function GetTempWindowsPath: string;
var
tmp: array[0..1023] of AnsiChar;
begin
GetTempPath(1024, Tmp);
Result:=tmp;
end;
function SendFile(FileName, FTPPath: PAnsiChar): Boolean; Export;
var
FTP: TFtpClient;
Log: TIcsLogger;
begin
Result:=false;
if FileExists(StrPas(FileName)) then begin
Log:= TIcsLogger.Create(nil);
FTP:=TFtpClient.Create(nil);
try
FTP.HostName:=ftpHost;
FTP.Username:=ftpUsername;
FTP.PassWord:=ftpPassword;
FTP.Passive:=true;
Log.LogOptions:=[loDestEvent,loDestFile,loDestOutDebug,loAddStamp,loWsockErr,loW sockInfo,loWsockDump,loSslErr,loSslInfo,loSslDump,loProtSpecErr,loProtSpecInfo,l oProtSpecDump];
Log.LogFileName:=sFileLog;
FTP.IcsLogger:=Log;
try
FTP.Connect;
FTP.LocalFileName := StrPas(FileName);
FTP.HostFileName := StrPas(FTPPath) + '/' + ExtractFileName(FTP.LocalFileName);
Result:=FTP.Put;
finally
FTP.Quit;
end;
finally
FTP.Free;
Log.Free;
end;
end;
end;
function RenameFile(FtpFileNameOld, FtpFileNameNew: PAnsiChar): Boolean; Export;
var
FTP: TFtpClient;
Log: TIcsLogger;
begin
Log:= TIcsLogger.Create(nil);
FTP:=TFtpClient.Create(nil);
try
FTP.HostName:=ftpHost;
FTP.Username:=ftpUsername;
FTP.PassWord:=ftpPassword;
FTP.Passive:=true;
Log.LogOptions:=[loDestEvent,loDestFile,loDestOutDebug,loAddStamp,loWsockErr,loW sockInfo,loWsockDump,loSslErr,loSslInfo,loSslDump,loProtSpecErr,loProtSpecInfo,l oProtSpecDump];
Log.LogFileName:=rFileLog;
FTP.IcsLogger:=Log;
try
FTP.Connect;
FTP.HostFileName:= StrPas(FtpFileNameOld);
FTP.LocalFileName:= StrPas(FtpFileNameNew);
Result:=FTP.Ren;
finally
FTP.Quit;
end;
finally
FTP.Free;
Log.Free;
end;
end;
function ReciveFile(FTPFileName, FileName: PAnsiChar): Boolean; Export;
var
FTP: TFtpClient;
Log: TIcsLogger;
TmpDir: string;
begin
// Result:=false;
TmpDir:=GetTempWindowsPath + 'ftp_r';
Log:= TIcsLogger.Create(nil);
FTP:=TFtpClient.Create(nil);
try
FTP.HostName:=ftpHost;
FTP.Username:=ftpUsername;
FTP.PassWord:=ftpPassword;
FTP.Passive:=true;
Log.LogOptions:=[loDestEvent,loDestFile,loDestOutDebug,loAddStamp,loWsockErr,loW sockInfo,loWsockDump,loSslErr,loSslInfo,loSslDump,loProtSpecErr,loProtSpecInfo,l oProtSpecDump];
Log.LogFileName:=rFileLog;
FTP.IcsLogger:=Log;
try
if (not DirectoryExists(TmpDir)) then CreateDir(TmpDir);
FTP.Connect;
FTP.HostFileName := StrPas(FTPFileName);
FTP.LocalFileName := TmpDir + '\' + ExtractFileName(StrPas(FileName));
Result:= FTP.Get and SysUtils.RenameFile(TmpDir + '\' + ExtractFileName(StrPas(FileName)), StrPas(FileName));
finally
FTP.Quit;
end;
finally
FTP.Free;
Log.Free;
end;
end;
function DeleteFile(FTPFileName: PAnsiChar): Boolean; Export;
var
FTP: TFtpClient;
Log: TIcsLogger;
begin
Log:= TIcsLogger.Create(nil);
FTP:=TFtpClient.Create(nil);
try
FTP.HostName:=ftpHost;
FTP.Username:=ftpUsername;
FTP.PassWord:=ftpPassword;
FTP.Passive:=true;
Log.LogOptions:=[loDestEvent,loDestFile,loDestOutDebug,loAddStamp,loWsockErr,loW sockInfo,loWsockDump,loSslErr,loSslInfo,loSslDump,loProtSpecErr,loProtSpecInfo,l oProtSpecDump];
Log.LogFileName:=rFileLog;
FTP.IcsLogger:=Log;
try
FTP.Connect;
FTP.HostFileName := StrPas(FTPFileName);
Result:=FTP.Dele;
finally
FTP.Quit;
end;
finally
FTP.Free;
Log.Free;
end;
end;
function GetFileList(FTPPath: PAnsiChar; var RBuf: TStrings): Boolean; Export;
var
FTP: TFtpClient;
Log: TIcsLogger;
begin
Log:= TIcsLogger.Create(nil);
FTP:=TFtpClient.Create(nil);
try
FTP.HostName:=ftpHost;
FTP.Username:=ftpUsername;
FTP.PassWord:=ftpPassword;
FTP.Passive:=true;
Log.LogOptions:=[loDestEvent,loDestFile,loDestOutDebug,loAddStamp,loWsockErr,loW sockInfo,loWsockDump,loSslErr,loSslInfo,loSslDump,loProtSpecErr,loProtSpecInfo,l oProtSpecDump];
Log.LogFileName:=rFileLog;
FTP.IcsLogger:=Log;
try
FTP.Connect;
FTP.HostDirName:=StrPas(FTPPath);
FTP.LocalFileName:=GetTempWindowsPath + 'icslist.tmp';
Result:= FTP.Cwd and FTP.Dir;
RBuf.LoadFromFile(GetTempWindowsPath + 'icslist.tmp');
SysUtils.DeleteFile(GetTempWindowsPath + 'icslist.tmp');
finally
FTP.Quit;
end;
finally
FTP.Free;
Log.Free;
end;
end;
exports
SendFile, RenameFile, ReciveFile, DeleteFile, GetFileList;
begin
end.
Сергей М. (2007-12-11 13:42:00) [15]см. [3]
Dennis I. Komarov (2007-12-11 13:36:00) [16]Экземпляры создаюся там же - на инди вроде работает все
Сергей М. (2007-12-11 13:34:00) [17]И что тебе непонятно при этом ?
Dennis I. Komarov (2007-12-11 13:30:00) [18]В dll запрятаны процедуры Send, Recive и т.п.
Разумеется передачи файлов, ФТП все-таки :)
Сергей М. (2007-12-11 13:05:00) [19]
> Процедуры передачи в dll
>
Передачи чего и зачем ?