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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.08.2010, 13:18   #1
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию Удалить загруженный файл из Temp-папки

Всем привет!

Интересен вопрос след. характера.

Программа при старте скачивает картинку и сохроняет в Temp папку, и загружает в Timage.

Путь до папкпи+имя файла примерно так:
Код:
function GetImgName: string;
begin
  Result:=IncludeTrailingBackslash(GetTempDir)+AdminForm.HTTPLogoFileNameEdit.Text ;
end;

GetTempDir
- процедура получения ссылки на временную папку.

при завершении программы нужно удалять файл. Пробовал:
Код:
DeleteFile(GetImgName);
ничего не удаляется.. изображение загружается в Timage даже если нет интернета.. (грузится из временой папки).. как удалить?

Последний раз редактировалось Человек_Борща; 03.08.2010 в 13:23.
Человек_Борща вне форума Ответить с цитированием
Старый 03.08.2010, 13:26   #2
Sanprof
Форумчанин
 
Аватар для Sanprof
 
Регистрация: 28.01.2008
Сообщений: 267
По умолчанию

а изображение не используется вашей программой или какой нибудь другой??? и путь обязательно должен быть полным, к примеру (C:\TEMP\1\1\1\Img1.jpg)
Не забываем говорить спасибо за помощь - это ведь так приятно

Последний раз редактировалось Sanprof; 03.08.2010 в 13:29.
Sanprof вне форума Ответить с цитированием
Старый 03.08.2010, 13:45   #3
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

нет изображение использует только моя программа..

т.е. программа скачивает изображение , сохраняет через функцию GetImgName(путь до папки temp+\+имя изображения) , и потом грузит в TImage

.. после закрытия программы , изображение должно удяляться из папти..

но этого не происходит.. почему?
Человек_Борща вне форума Ответить с цитированием
Старый 03.08.2010, 13:48   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
 if not DeleteFile(GetImgName) then RaiseLastWin32Error;
И посмотри чем ось отмазывается.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.08.2010, 13:50   #5
Sanprof
Форумчанин
 
Аватар для Sanprof
 
Регистрация: 28.01.2008
Сообщений: 267
По умолчанию

значит пока ваша программа запущена изображение ею используется и поэтому не может быть удалено, попробуте освободить ссылки на загруженные изображения в TImage? что-то типа того
Код:
Image1.Picture := nil;
Не забываем говорить спасибо за помощь - это ведь так приятно
Sanprof вне форума Ответить с цитированием
Старый 03.08.2010, 14:00   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

может потому что где то не уничтожен файловый обьект?(не закрыт файл)
покажи как грузишь и скачиваешь?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 03.08.2010, 14:04   #7
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

Чего-то ТС скорее всего в пути не так пишет...ну вот например все работает:
Код:
function GetTempDir: String;
var
  Buf: array[0..1023] of Char;
begin
  SetString(Result, Buf, GetTempPath(Sizeof(Buf)-1, Buf));
end;

procedure LoadJPG(HTTP : TidHTTP; picURL : string);
var
  st : TMemoryStream;
begin
 st := TMemoryStream.Create;
 HTTP.Get(picURL, st);
 st.Position:=0;
 st.SaveToFile(GetTempDir + '\123.jpeg');
 st.free;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  LoadJPG(IdHTTP1, 'http://allday.ru/uploads/posts/2010-08/thumbs/1280651156_ec8ozsgr7g9aw1p.jpeg');
  Image1.Picture.LoadFromFile(GetTempDir + '\123.jpeg');
  DeleteFile(GetTempDir + '\123.jpeg');
end;
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Старый 03.08.2010, 14:07   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
значит пока ваша программа запущена изображение ею используется и поэтому не может быть удалено, попробуте освободить ссылки на загруженные изображения в TImage? что-то типа того
Не. Это в другом дело. Я дал пример кода, который покажет в случае неудачи ошибку и ее текст.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.08.2010, 14:28   #9
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Гружу изображение вот так:
Код:
var
  imgURl,imgName,TempDir:string;
begin
  ImgURL:=AdminForm.HTTPLogoEdit.Text;
  imgName:=AdminForm.HTTPLogoFileNameEdit.Text;
  TempDir:=GetTempDir;
  Translator_MessageToLog('Грузим лого изображение...','Downloading logo-image...',MainForm.Log);
 if HTTPGetFile(ImgURL+ImgName,GetImgName,False)  then
 begin
 Translator_MessageToLog('Загрузка лого успешно завершена!','Downloading logo-image succsesfly complited!',MainForm.Log);
 try
 MainForm.HosterLogo.Picture.LoadFromFile(GetImgName);
 MainForm.HosterLogo.Repaint;
 except
 Translator_MessageToLog('[Ошибка] Ошибка чтения логотипа программы!','[Error] Error reading program logo!',MainForm.log);
 Exit;
 end;
 end else
 Translator_MessageToLog('[Ошибка] Не удалось скачать лого-изображение!','[Error] Unable to download the logo-image!',MainForm.log);
 Exit;
end;
там же и загружает Timage .

Stilet - проверка показала что мне отказано в доступе при удалении изображения..

Sanprof - это присать в OnDestroy формы?

Пепел_Феникса - возможно я думаю может нужно построить схему типа:
Скачивание изображения.
Загрузка в TImage
{использование}
Очистка TImage
удаление..

Насчет очистки TImage я ничего не нашёл=(
Человек_Борща вне форума Ответить с цитированием
Старый 03.08.2010, 14:40   #10
Sanprof
Форумчанин
 
Аватар для Sanprof
 
Регистрация: 28.01.2008
Сообщений: 267
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
это присать в OnDestroy формы?
попробуйте там или в OnClose, сначала освобождаете ссылку потом удаляете. Хотя посути LoadFromFile не должен держать файл.
Не забываем говорить спасибо за помощь - это ведь так приятно

Последний раз редактировалось Sanprof; 03.08.2010 в 14:45.
Sanprof вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
удалить файлы и папки Viten2 Общие вопросы Delphi 31 08.09.2011 13:18
WinInet загрузить файл во временной файл , использовать, потом удалить Человек_Борща Работа с сетью в Delphi 5 03.08.2010 13:46
Удалить файл record222 Общие вопросы Delphi 1 16.05.2010 18:42
Как удалить ярлык из папки "Автозагрузка"? docbrain Общие вопросы Delphi 5 15.01.2010 11:27
Ссылка на файл из текущей папки! Сбор инфы в один файл! mephist Microsoft Office Excel 11 10.07.2009 13:51