Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.12.11;
Скачать: CL | DM;

Вниз

ИнтернетТемп в ХР   Найти похожие ветки 

 
nl2011   (2011-09-02 09:17) [0]

Здравствуйте. Пытался сделать некое подобие обновления программы через интернет, для собственной практики, и наткнулся на такую вещь: первые 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" - имеет рандомно генерируемое имя. И на некоторых машинах в нее вообще может быть запрещен доступ)
Помогите)


 
Anatoly Podgoretsky ©   (2011-09-02 10:13) [1]

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

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


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

Anatoly Podgoretsky ©

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


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


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

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


 
Anatoly Podgoretsky ©   (2011-09-02 10:34) [4]

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

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

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


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



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

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


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

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


 
Anatoly Podgoretsky ©   (2011-09-02 11:03) [7]

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

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


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


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



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);
все равно кэшируются качаемые файлы...


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


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

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


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

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

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


 
RWolf ©   (2011-09-02 12:05) [11]

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


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

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

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


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

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


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

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



Страницы: 1 вся ветка

Текущий архив: 2011.12.11;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.009 c
15-1313419636
serhioli
2011-08-15 18:47
2011.12.11
Визуальное программирование


15-1314290508
Petr V. Abramov
2011-08-25 20:41
2011.12.11
вопрос по Oracle11


15-1313305232
alexdn
2011-08-14 11:00
2011.12.11
Чисто технический вопрос


15-1314177562
P
2011-08-24 13:19
2011.12.11
Состояние/позиция окна в Windows 7


2-1314548803
Gu
2011-08-28 20:26
2011.12.11
Console