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

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

ИнтернетТемп в ХР [D7]


nl2011 ©   (2011-09-02 09:17:00) 

Здравствуйте. Пытался сделать некое подобие обновления программы через интернет, для собственной практики, и наткнулся на такую вещь: первые 2 файла через интернет с моего фтп скачивается нормально, а потом начинается косяк. Потому что, для того чтобы снова качать эти же файлы, программа решает не лесть в интернет, а скачать их из:
C:\Documents and Settings\User\Local Settings\Temporary Internet Files\Content.IE5\IMJFUVYQ\
И потом ничего не помогает убедить программу качать уже не оттуда а с ФТП. Что делать? Как сделать так, чтобы программа качала всегда с фтп?
Вот код как качаю:


function GetSize:string;
var
F: textfile;
s: string;
begin
 AssignFile(F, '\update\newsize.txt');
 Reset(F);
 Readln(f, s);
 CloseFile(F);
 Result := s;
end;

function GetInetFile(const fileURL, FileName: string): boolean;
const
 BufferSize = 1024;
var
 hSession, hURL: HInternet;
 Buffer: array[1..BufferSize] of Byte;
 BufferLen: DWORD;
 f: file;
 sAppName: string;
begin
 Result := False;
 sAppName := ExtractFileName(Application.ExeName);
 hSession := InternetOpen(PChar(sAppName),
 INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
 try
   hURL := InternetOpenURL(hSession, PChar(fileURL), nil, 0, 0, 0);
   try
     AssignFile(f, FileName);
     Rewrite(f,1);
     repeat
       InternetReadFile(hURL, @Buffer, SizeOf(Buffer), BufferLen);
       Application.ProcessMessages();
       BlockWrite(f, Buffer, BufferLen);
       Application.ProcessMessages();
     until
     BufferLen = 0;
     CloseFile(f);
     Result := True;
   finally
     InternetCloseHandle(hURL);
   end;
 finally
   InternetCloseHandle(hSession);
 end;
end;

procedure TDBase.DownloadClick(Sender: TObject);
var
 s, FileOnNet, LocalFileName: string;
 F: textfile;
 i:longint;
begin
 AssignFile(F, pp+'update\size.txt');
 Reset(F);
 Readln(f,s);
 CloseFile(F);

 FileOnNet := ' ftp://4.4.4.4/all/newsize.txt';
 LocalFileName := (pp+'\update\newsize.txt');

 if GetInetFile(FileOnNet, LocalFileName) = True then
      begin
       Application.ProcessMessages();

       if GetFileSize('\update\newsize.txt') = 0 then
       begin
        ShowMessage('Ошибка загрузки.');
        DeleteFile(pp+'\update\newsize.txt');
        exit;
       end;

          if s <> GetSize then
          case MessageDlg('Доступна для скачивания версия : '+GetSize+'. Загрузить?', mtConfirmation, [mbyes, mbno], 0) of
           idyes:
             begin
               FileOnNet := ' ftp://4.4.4.4/all/1.exe';
               LocalFileName := ('\update\1.exe');

               if GetInetFile(FileOnNet, LocalFileName) = True then
               ShowMessage('Загрузка завершена');
             end;
           end;

 end;

DeleteFile('\update\newsize.txt');
end;


Так вот первый раз файлы newsize.txt и 1.exe качаются с фтп, а все последующее время они качаются из :
C:\Documents and Settings\User\Local Settings\Temporary Internet Files\Content.IE5\IMJFUVYQ\
Притом что папка "IMJFUVYQ" - имеет рандомно генерируемое имя. И на некоторых машинах в нее вообще может быть запрещен доступ)
Помогите)


nl2011   (2011-09-02 16:49:00) [1]

RWolf ©, ~AQUARIUS~
Спасибо большое)


~AQUARIUS~   (2011-09-02 12:15:00) [2]

InternetOpenUrl
INTERNET_FLAG_RELOAD
Forces a download of the requested file, object, or directory listing from the origin server, not from the cache.


Anatoly Podgoretsky   (2011-09-02 12:07:00) [3]

> nl2011  (02.09.2011 11:38:08)  [8]

А что тут делают FindRes:=FindFirst(Dir+'*.*',faAnyFile,SR); и строки дальше
Тогда нафига FileOperation


RWolf   (2011-09-02 12:05:00) [4]

Не нужно сидеть на работе с 38,2°. //К.О.
Флаг называется INTERNET_FLAG_RELOAD, загляните же в MSDN.


nl2011   (2011-09-02 11:54:00) [5]

Да мне трудно жить, посиди на работе с 38.2 посмотрим на твою внимательность)

Кстати,  
InternetOpenURL(hSession, PChar(fileURL), nil, 0, INTERNET_FLAG_PRAGMA_NOCACHE, 0);
при установленном флаге предпоследнемпараметре - тоже кэшируется)


QAZ   (2011-09-02 11:46:00) [6]


> InternetOpenURL(hSession, PChar(fileURL), nil, 0, 0, INTERNET_FLAG_PRAGMA_NOCACHE);
>  
> все равно кэшируются качаемые файлы...

как же тебе трудно жить то...
флаги в предпоследнемпараметре


nl2011   (2011-09-02 11:38:00) [7]


> Туда и больше нигде, это кеш эксплорера, достаточно очищить
> эту папку не
> отвекаясь на имена файлов.



procedure FindFile(Dir:String);
Var
   SR:TSearchRec;
   FindRes:Integer;
begin
FindRes:=FindFirst(Dir+'*.*',faAnyFile,SR);
While FindRes=0 do
  begin

     if ((SR.Attr and faDirectory)=faDirectory) and
     ((SR.Name='.')or(SR.Name='..')) then
        begin
           FindRes:=FindNext(SR);
           Continue;
        end;

     if ((SR.Attr and faDirectory)=faDirectory) then
        begin
           FindFile(Dir+SR.Name+'\');
           FindRes:=FindNext(SR);
           Continue;
        end;

     Application.ProcessMessages();

     if SR.Name = 'MyDownload11111.exe' then
        FileOperation(Dir+SR.Name, '', FO_DELETE, FOF_ALLOWUNDO + FOF_NOCONFIRMATION);
     if SR.Name = 'myndfsize.txt' then
        FileOperation(Dir+SR.Name, '', FO_DELETE, FOF_ALLOWUNDO + FOF_NOCONFIRMATION);

     FindRes:=FindNext(SR);
  end;

FindClose(SR);
end;


Ничего оттуда не удаляет. Он их даже не находит в этих системых суперскрытых подпапках, хотя они там есть.


> вообщето в функции которая у тебя используется туева куча
> флагов
> включая ответственые за кэширование


сделал:
InternetOpenURL(hSession, PChar(fileURL), nil, 0, 0, INTERNET_FLAG_PRAGMA_NOCACHE);
все равно кэшируются качаемые файлы...


Anatoly Podgoretsky   (2011-09-02 11:03:00) [8]

> nl2011  (02.09.2011 10:25:03)  [3]

Туда и больше нигде, это кеш эксплорера, достаточно очищить эту папку не
отвекаясь на имена файлов.


QAZ   (2011-09-02 10:53:00) [9]

вообщето в функции которая у тебя используется туева куча флагов
включая ответственые за кэширование


nl2011   (2011-09-02 10:42:00) [10]



> Как это не знаешь...

То есть мне надо предварительно узнавать имя пользователя который сейчас активен в системе, потом искать учетную запись в C:\Documents and Settings\ или как его там, потом проверять есть ли там файл и удалять? или вообще учетки нету, или пути другие, например по русски написаны, или просто другие, то что делать? Или удаление запрещено?


Anatoly Podgoretsky   (2011-09-02 10:34:00) [11]

Как это не знаешь, а

C:\Documents and Settings\User\Local Settings\Temporary Internet Files\Content.IE5

Очищать все подпапки, элементарнейшая задача, можно делать бат файлом, если ума недостаточно, но лучше FileOperations


nl2011   (2011-09-02 10:25:00) [12]

В смысле в моем оно туда качается а в другом может в какую нибудь С:\Temp
не сканировать же мне весь диск С в поисках 1.exe )


nl2011   (2011-09-02 10:23:00) [13]

Anatoly Podgoretsky ©

> Ну так удали до закачки


Как я удалю до закачки если :
1) я не знаю в какую папку оно скачалось в начале
2) доступ на удаление может быть закрыт
?


Anatoly Podgoretsky   (2011-09-02 10:13:00) [14]

> nl2011  (02.09.2011 09:17:00)  [0]

Ну так удали до закачки


Наверх

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