Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.03.2012, 22:01   #1
Зод
Форумчанин
 
Регистрация: 25.08.2011
Сообщений: 140
По умолчанию функция, как совободить файл от фокуса и удалить?

Код:
function recognize(filename: string; apikey: string; is_phrase: boolean; 
is_regsense: boolean; is_numeric: boolean; min_len: integer; max_len: integer): string;
var
ftype,tmpstr,captcha_id: String;
i: integer;
http: TIdHTTP;
multi: Tidmultipartformdatastream;
begin
if FileExists(filename)=false then begin result:='ERROR: file not found'; exit; end;

ftype:='image/pjpeg';
if strpos(Pchar(filename),'jpg')<>nil then ftype:='image/pjpeg';
if strpos(Pchar(filename),'gif')<>nil then ftype:='image/gif';
if strpos(Pchar(filename),'png')<>nil then ftype:='image/png';

multi:=Tidmultipartformdatastream.Create;
multi.AddFormField('method','post');
multi.AddFormField('key',apikey);
multi.AddFile('file',filename,ftype);
if is_phrase=true then multi.AddFormField('phrase','1');
if is_regsense=true then multi.AddFormField('regsense','1');
if is_numeric=true then multi.AddFormField('numeric','1');
if min_len>0 then multi.AddFormField('min_len',inttostr(min_len));
if max_len>0 then multi.AddFormField('max_len',inttostr(max_len));

http:=TIdHTTP.Create(nil);
tmpstr:=http.Post('http://antigate.com/in.php',multi);
http.Free;
captcha_id:='';
if strpos(Pchar(tmpstr),'ERROR_')<>nil then begin result:=tmpstr; exit; end;
if strpos(Pchar(tmpstr),'OK|')<>nil then captcha_id:=AnsiReplaceStr(tmpstr,'OK|','');
if captcha_id='' then result:='ERROR: bad captcha id';
for i:=0 to 20 do
  begin
  Application.ProcessMessages;
  sleep(5000);
  http:=TIdHttp.Create(nil);
  tmpstr:=http.Get('http://antigate.com/res.php?key='+apikey+'&action=get&id='+captcha_id);
  http.Free;
  if strpos(Pchar(tmpstr),'ERROR_')<>nil then begin result:=tmpstr; exit; end;
  if strpos(Pchar(tmpstr),'OK|')<>nil then
    begin
    result:=AnsiReplaceStr(tmpstr,'OK|','');
    exit;
    end;
  Application.ProcessMessages;
  end;
result:='ERROR_TIMEOUT';
end;
Эта сама функция она отправляет файл но не снимает с него фокуса что ли, вообщем удалить файл пока работает программа (даже если функция уже отработала) нельзя. Хотел бы узнать а как сделать что бы можно.
Второй вопрос а можно как-нибудь отправить файл этой функцией не с диска компьютера а например HTTP.Document синапса? что бы не создавать постоянно файлы которые и сама программа удалить не может (функция не дает же)

Последний раз редактировалось Зод; 14.03.2012 в 22:03.
Зод вне форума Ответить с цитированием
Старый 14.03.2012, 22:11   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

вы не освобождаете объект multi.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 03.04.2012, 13:41   #3
Зод
Форумчанин
 
Регистрация: 25.08.2011
Сообщений: 140
По умолчанию

Даже если воткнуть в конец функции Multi.Free; все равно проблема остается: ни удалить, ни перезаписать.
Зод вне форума Ответить с цитированием
Старый 06.04.2012, 17:56   #4
Mifody
Заблокирован
 
Регистрация: 12.02.2009
Сообщений: 215
По умолчанию

1. сколько пользовал эту функцию, ни разу файл не лочился. Так что скорее всего проблема не здесь
2. по ссылке страница автора на антигейте перейти не? Там модуль в т.ч. и для отправки через TMemoryStream
Mifody вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как удалить файл старого windows ruslan_87 Windows 1 08.10.2010 22:37
Как в VBA удалить системный файл valerij Microsoft Office Excel 13 15.04.2009 16:24
Как удалить файл с русским именем? Cricket2007 Помощь студентам 7 12.02.2008 17:51
Как удалить файл dagarik Общие вопросы Delphi 9 05.12.2007 20:25