![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Поиск файла на ftp сервере
Helen © (2007-03-06 11:07:00)Добрый день. Помогите разобраться. Копирую файлы с ftp сервера:
hFind:=FtpFindFirstFile(hFTP, PChar(ss+'*.dbf'), sRec, 0, 0);
repeat
hFile := FtpOpenFile(hFTP, sRec.cFileName, GENERIC_READ, FTP_TRANSFER_TYPE_BINARY, 0);
if hFile = nil
then begin
hNext:=InternetFindNextFile(hFind, @sRec);
Continue;
end;
AssignFile(LocalFile, ConfArr[6]+'\'+NewName);
Rewrite(LocalFile, 1);
bufsize := READ_BUFFERSIZE;
while (bufsize > 0) do begin
if not InternetReadFile(hFile, @buffer, READ_BUFFERSIZE, bufsize)
then Break;
if (bufsize > 0) and (bufsize <= READ_BUFFERSIZE)
then BlockWrite(LocalFile, buffer, bufsize);
end;
InternetCloseHandle(hFile);
CloseFile(LocalFile);
hNext:=InternetFindNextFile(hFind, @sRec);
until hNext=False;
А теперь нужно скопировать еще один файл:
hFind:=FtpFindFirstFile(hFTP, PChar('f4calls.dbf'), sRec, 0, 0);
hFile := FtpOpenFile(hFTP, sRec.cFileName, GENERIC_READ, FTP_TRANSFER_TYPE_BINARY, 0);
и т.д.
почему-то FtpFindFirstFile выдает nill, хотя файл там точно есть
Helen (2007-03-06 14:27:00) [1]Спасибо большое за наводку, InternetCloseHandle(hFind) помог. Теперь все хорошо. Еще раз спасибо.
Плохиш (2007-03-06 12:04:00) [2]http://www.cryer.co.uk/brian/delphi/wininet.htm#FtpFindFirstFile
Note:
Be aware that only one searchcan be made within a given FTP session. Call InternetCloseHandle to close the search handle to close the session handle, otherwise future searches will fail with ERROR_FTP_TRANSFER_IN_PROGRESS.
Плохиш (2007-03-06 11:59:00) [3]И где в твоём коде строчка
InternetCloseHandle(hFind);?
Плохиш (2007-03-06 11:57:00) [4]В описании FtpFindFirstFile говорится, что ошибку можно получить с помощью функции GetLastError, так и что говорит GetLastError в твоём случае?
Helen (2007-03-06 11:44:00) [5]почему, если я зашла в эту папку и скопировала файл руками?
Плохиш (2007-03-06 11:42:00) [6]
> почему-то FtpFindFirstFile выдает nill, хотя файл там точно есть
Честно скажу, FtpFindFirstFile я доверяю больше.
Helen (2007-03-06 11:41:00) [7]не нахожу, т.к. ss='01-03-2007', например, т.е. нужно файлы, начинающиеся на ss
Helen (2007-03-06 11:39:00) [8]>Плохиш © (06.03.07 11:35) [7]
>А находиться он где?
находится там же
>umbra © (06.03.07 11:34) [5]
с регистром все нормально, файлы именуются только маленькими буквами
Плохиш (2007-03-06 11:39:00) [9]
> Helen (06.03.07 11:39) [9]
> >Плохиш © (06.03.07 11:35) [7]
> >А находиться он где?
> находится там же
Осталось выяснить кто-такой ss...
Плохиш (2007-03-06 11:38:00) [10]Кстати не понятно
> hFind:=FtpFindFirstFile(hFTP, PChar( ss+'*. dbf'), sRec, 0, 0);
> hFind:=FtpFindFirstFile(hFTP, PChar( 'f4calls. dbf'), sRec, 0, 0);
> ищу в той же папке, что и предидущие файлы
как-то не вяжуться, не находите?
Плохиш (2007-03-06 11:35:00) [11]
> Helen (06.03.07 11:20) [4]
> ищу в той же папке, что и предидущие файлы
А находиться он где?
PS. В [0] замени цикл repeatна while, иначе при отсутствии требуемых файлов получишь ошибку.
clickmaker (2007-03-06 11:34:00) [12]
> [4] Helen (06.03.07 11:20)
может FtpSetCurrentDirectory надо вызвать сначала или полный путь указать (относительно рута)?
umbra (2007-03-06 11:34:00) [13]сервер может быть чувствительным к регистру, т.е.
f4calls.dbfиF4calls.dbf- это разные файлы
Helen (2007-03-06 11:20:00) [14]ищу в той же папке, что и предидущие файлы
Плохиш (2007-03-06 11:19:00) [15]Значит ищешь не там...
Helen (2007-03-06 11:16:00) [16]Дело в том, что если я подключаюсь руками, а не программо, то файл можно скопировать
Плохиш (2007-03-06 11:12:00) [17]
> почему-то FtpFindFirstFile выдает nill, хотя файл там точно
> есть
Значит нет доступа к нему по ftp.