![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
Приветсвую, ребята помогите доделать код ниже для того, чтобы мне не приходилось создавать новые файлы, а дописывать данные к существующему:
Код:
uses
WinInet;
function Upload(Serv, Login, Pas, InFN, {OutFN, } Folder: string): Boolean;
var
InetHandle, FtpHandle: HInternet;
begin
RESULT := FALSE;
InetHandle := InternetOpen(PChar('FTP'), //nil или Microsoft Internet Explorer
0, //INTERNET_OPEN_TYPE_PRECONFIG !!!!! INTERNET_OPEN_TYPE_DIRECT
nil, nil, 0);
FtpHandle := InternetConnect(InetHandle, PChar(Serv), 21, //INTERNET_DEFAULT_FTP_PORT
PChar(Login), PChar(Pas), INTERNET_SERVICE_FTP, 0, //INTERNET_FLAG_PASSIVE,
255); //0
Sleep(100);
if FtpHandle <> nil then
begin
//
if not FtpSetCurrentDirectory(FtpHandle, PChar(Folder)) then
begin
if FtpCreateDirectory(FtpHandle, PChar(Folder)) then
FtpSetCurrentDirectory(FtpHandle, PChar(Folder));
end;
//
try
FtpPutFile(FtpHandle, PChar(InFN), PChar({OutFN} IntToStr(RandomInteger(6)) + '_' + RandomString(6)), FTP_TRANSFER_TYPE_BINARY, //FTP_TRANSFER_TYPE_UNKNOWN
255); //0
InternetCloseHandle(FtpHandle);
RESULT := TRUE;
except
end;
end;
InternetCloseHandle(InetHandle);
end;
|
|
#2
|
||||
|
||||
|
на сколько я могу судить данная тема уже поднималась: http://www.delphisources.ru/forum/showthread.php?t=6181
|
|
#3
|
||||
|
||||
|
Оно и есть только не на INDY надо, а на WinInet.
Неужели надо скачивать файл, дописывать и выгружать обратно, иначе никак, а если файл много весит ? |
|
#4
|
||||
|
||||
|
нашел в каких-то исходниках такое:
Код:
int num = FtpGetRetryCount(hConnect); int num = FtpGetRetryCount(&getConnection()); if ( g_manager.opt.RetryCount > 0 && num >= g_manager.opt.RetryCount ) return FALSE; FtpSetRetryCount( hConnect,num+1 ); if ( !hConnect->ConnectMessageTimeout(MCannotUpload, remoteFile, MRetry)) FtpSetRetryCount(&getConnection(), num+1 ); if (!getConnection().ConnectMessageTimeout(MCannotUpload, remoteFile, MRetry)) return FALSE; Reput = TRUE; if ( FtpCmdLineAlive(hConnect) && FtpKeepAlive(hConnect) ) if(getConnection().keepAlive()) Думаю шо как-то так. Только чего-то в WinInet я такое не нашел o_O. Но думаю можно послать команду APPE (APPE <SP> <проход> - Присовокупить передаваемые данные к файлу, указанному в параметре проход) на ДОзапись серверу через FtpCommandПоследний раз редактировалось Marvel, 01.07.2010 в 17:20. |
|
#5
|
|||
|
|||
|
А если попробовать хранить файл в БД (поле blob), если есть такая возможность?
|
|
#6
|
||||
|
||||
|
Такой возможности нет, но выяснилось что тут надо напрямую плясать с сервером, отсылать ему команды, но я не в курсах как это реализовать, опыта нет. Выдрать инфу из сурсов ИНДИ так же не удалось, так что тема остается открытой.
|