Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Поиск файла на 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.


Наверх

Титульная страница Поиск, карта сайта Написать письмо