Подскажите в чем ошибка, не могу удалить капчу из папки, я вытаскиваю с интернета и сохраняю капчу при открытии програмы, потом ее разгадывает сервис antigate я отправляю данные в интернет и потом капча удаляется и загружается новая. Вот код загрузки и удаления капчи: PHP: DeleteFile(ProgramDirectory+'/captcha.jpg'); Capcha; (Функция получающая капчу) Image1.Picture.SaveTofile(ProgramDirectory+'/captcha.jpg'); Вот код на кнопке который отсылает данные на antigate: PHP: rsltedit.Text:='recognizing...'; Button1.Enabled:=false; rsltedit.Text:=recognize(ProgramDirectory+filenameedit.Text,apikeyedit.Text,false,false,false,0,0); Button1.Enabled:=true; edit4.Text:=rsltedit.Text; Вот скриншот ошибки которую выкидывает: Я думаю что это антигейт ее использует, больше нечему, как это исправить??? Помогите пожалуйста, очень нужно
Насмешил "Больше нечему"... хехе Как раз сервис антикапчи никак и не может использовать файл на твоём компе. Если у тебя многопоток, то файл скорее всего занят другим потоком. Если один поток, то тут возможны варианты: - файл не закрыт, а всё ещё открыт. Используй Close(); - обращение к файлу на удаление происходит слишком быстро, то есть в файл всё ещё происходит запись данных. Если у тебя многопоток, то пиши всё в разные файлы, а потом их удаляй. Но лучше всего передавать картинку сразу на сервис и в файл ничего не писать. Счас скину пример на C# для anti-captcha.net
Randomize; Временной решение проблемы, DeleteFile(ProgramDirectory+'/' + Random(100000)+'.jpg'); Была такаяже проблема, Image1.Picture.SaveTofile(ProgramDirectory+'/captcha.jpg'); Вот зачем ее на форму пихать?! Сразу в файл.... Тыж ее в ручную не вводиш...
И хорошо. чисто случайно в 1 момент времени Ваш Random(100000) выдает одинаковое число. что произойдет? (а по закону подлости: "все, что может произойти произойдет в самый неподходящий для этого момент") Решение проблемы - наследники класса TStream
Всё верно ТС думает. Если вы используете стандартное демо от antigate, то у них там косяк с освобождением памяти. Отсутствует строка multi.Free;
Неважно от кого демо. Сервис, размещённый в интернете, не может захватить ресурсы (файл) так, чтобы он был недоступен программам на машине. Это может сделать только программа, размещённая на том же компьютере.
Если вы такой умный, то может попробуйте сами? И увидите, что дело не "в сервисе, который размещен в интернете", а в коде. И если что-то в коде программы использует файл, то удалить его не получится. При чем тут вообще интернет? Вы в курсе, что за переменная "multi" в этом демо и что она делает?
Я о том и говорю, что проблема именно в коде. А вы говорите, что ТС прав, который говорит следующее " Я думаю что это антигейт ее использует, больше нечему..." А это бред! Антигейт не может использовать файл, т.к. антигейт расположен в интернете.
Для программиста каждый символ важен. Замени точку на запятую - и потеряешь кучу денег. И ни к чему я не цепляюсь. Мне не нравится, когда люди говорят ерунду.
у меня в программе есть ручной ввод капчи и есть через антигейт, если ручной то все норм работает, а если антикапча то выдает ошибку.