![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ИнтернетТемп в ХР [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]
Ну так удали до закачки